は、コードスニペットは、Djangoのビューコードから来ているでreturnステートメントを持っているコードの一部をリファクタリングする必要がありますが、それはあまり重要ではないん。それはsub.is_active = True
を行う以外 は、どのように私は、多くの異なる機能に存在しているが、それ
のは、私は次のコードがあるとしましょう
...def unsubscribe(request):
#start of block
user = request.user
sid = request.POST.get('subscription_id')
try:
sub = Subscription.objects.get(id=sid)
except ObjectDoesNotExist:
return ajax_response(False, [('subscription', 'Given subscription does not exist.')])
if sub.user != user:
return ajax_response(False, [('subscription', 'Invalid permission.')])
#end of block.
sub.is_active = False
sub.save()
return ajax_response(True)
と言うが、私は、上記の関数とまったく同じことを別の関数resubscribe()
を持っています。
この場合、#block
と#endblock
の間のコードは重複しないように、コードを整理する最良の方法は何ですか?一般的には、この質問は次のように書くことができます:
多くの異なる機能にコピー&ペーストされるコードブロックがあります。ただし、このコードブロックには
return
文が含まれています。その場合、このロジックを抽象化する最良の方法は何でしょうか?
EDIT:固定コードスニペット。
EDIT2:実は、この質問を解決する簡単な方法は、言うrequest
とブール値を取るtoggle_active_statusを、関数を作成することです。 (私は質問を掲示した後にそれを理解した)。
しかし、関数間のロジックが1行以上異なる場合、#blockと#endlbockの間のコードは入力の検証だけでなく、任意のアプリケーションロジック後で来ることができます。
私は実際にあなたの提案が好きです...この質問がどのように行くか見てみましょう。 –