Djangoでかなり重いビュー関数をリファクタリングしようとしています。浮かんでいる変数が多すぎて、それは巨大な関数です。
理想的には、ビューを論理関数にモジュール化したいです。ただし、変数に簡単にアクセスするには、関数コンテキストを渡す必要があります。
例えば:
def complex_view(request, slug):
some complex logic which creates variable abc ...
...
some more complex logic which uses variable abc ...
...
etc.
次のようになるはずです:
def complex_view(request, slug):
process_X()
...somehow pass variables and context to next function...
process_Y()
...
etc.
def process_X():
...
def process Y():
...
これを行うにはいくつかの方法が考えられますが、そのうちのいくつかはこのページで指摘されています:http: //mail.python.org/pipermail/tutor/2009-February/067506.html
a。マスタービューで定義されたサブ関数。どの変数が共有され、どの変数が共有されていないかを判断するのは難しいため、これは厄介なようです。
b。locals()
辞書として渡す。変数にアクセスする方法が2つあるため、これも厄介です。xyz
とcontextDict['xyz']
。そして、 1つを呼び出しN
で使用し、次をN+1
スタックで使用する必要があります。
c。ブルートフォースは、すべての変数を各関数呼び出しに渡し、関連する変数を返します。多くの変数が関係している場合、これは非常に面倒になります。
d。C ++ / C#では、クラスを作成し、MyComplexViewContext
すべての共有変数を定義し、作業を実行するためのメンバー関数を作成するだけです。self.xyz
その後、そのクラス内のすべてに使用できます。このメソッドはPythonでも使用できると思います。ただし、これが最善の方法かどうかはわかりません。
Python / Djangoでこれを行うための好ましい方法についてどう思いますか?