funのプログラミングでは、依存関係の管理が最小限に抑えたいという退屈な仕事のように感じています。 After reading this、私は、依存関係のインスタンスがキー文字列で検索されることによって、スーパー些細な依存性注入器を作ってみた:遅延呼び出しのためのPython依存性注入
def run_job(job, args, instance_keys, injected):
args.extend([injected[key] for key in instance_keys])
return job(*args)
私のプログラムでのコールは常に遅延し(ここで、関数定義されているので、このチープ・トリックの作品例えば、イテレータに)その引数とは別に保存されているハンドル:
jobs_to_run = [[some_func, ("arg1", "arg2"), ("obj_key",)], [other_func,(),()]]
理由があるため、すべてのイベントをスケジュールする必要があり、中央main loop
です。それはすべての依存関係への参照を持っているので、"obj_key"
用噴射が辞書オブジェクトに渡すことができ、例えば:
# inside main loop
injection = {"obj_key" : injected_instance}
for (callable, with_args, and_dependencies) in jobs_to_run:
run_job(callable, with_args, and_dependencies, injection)
イベント(ユーザ入力等)を発生しそう
は、メインループはupdate()
を呼び出すことその入力に反応する特定のオブジェクトに対して、
main loop
がリソースがあるときにスケジュールするジョブのリストを作成します。私には、
キーリファレンスにはどんな従属関係もありません。
他の人は、すべてのオブジェクトが直接の関係を形成するのではなく、注入するものです。
私はgame clock engine to run them on its own accordのすべての呼び出し可能関数(関数)を遅延定義しているので、上記の単純なアプローチでは複雑さがほとんどなくなりました。それでも、文字列でオブジェクトを参照する必要があります。同時に、依存関係を回避するのは臭いものでしたが、constructor or setter injectionはおそらく最も大きなdependency injection librariesのように過度の攻撃になります。 なまけが定義されている呼び出し可能に依存性を注入する特殊なケースでは
は、現存するが、より表現のデザインパターンですか?
'kwargs'構文を使って名前付きの関数パラメータを使用し、それを注入可能な' dict'として扱うというあなたの現在のアプローチを改良することができます。そうすれば、生の文字列は関数のパラメータとして明示的になります。 – user268396