1. ホーム
  2. パイソン

[解決済み】PythonでIoC / DIが一般的でないのはなぜ?

2022-03-24 22:34:57

質問

Javaで IoC / DI は、Webアプリケーション、ほとんどすべての利用可能なフレームワーク、およびJava EEで広範囲に使用されている非常に一般的なプラクティスです。一方、PythonのWebアプリケーションもたくさんありますが、Zope(これは本当に恐ろしいコードであると聞いています)以外では、IoCはPythonの世界ではあまり一般的ではないようです。(私が間違っていると思うのであれば、いくつかの例を挙げてください)。

もちろん、人気のあるJava IoCフレームワークのPython用のクローンがいくつかあります。 スプリングパイソン 例えば しかし、どれも実用に耐えるものではなさそうだ。少なくとも、私はこれまで ジャンゴ または sqlalchemy + <insert your favorite wsgi toolkit here> のようなものを使っているベースのWebアプリケーションです。

しかし、PythonでインターフェースクラスとIoCを広範囲に使用することは、少し奇妙で「Pythonic」ではないように見えます。しかし、なぜIoCがPythonで広く使われていないのか、誰かがもっと良い説明を持っているかもしれません。

どのように解決するのか?

私は、実はDI/IoCは あれ Pythonでは珍しいことです。何 しかし、DI/IoCの場合、一般的ではありません。 <項目 フレームワーク/コンテナ .

考えてみてください。DIコンテナは何をするものなのでしょうか?それは、次のことを可能にすることです。

  1. 独立したコンポーネントを結合して完全なアプリケーションにする ...
  2. ... ランタイムに

wiring together"とquot;at runtime"という名称があります。

  1. スクリプティング
  2. ダイナミック

つまり、DIコンテナは動的スクリプト言語のインタプリタに過ぎないのです。つまり、典型的なJava/.NETのDIコンテナは、XMLベースの構文を持つ、ひどい動的スクリプト言語用のくだらないインタプリタに過ぎないということです。

Pythonでプログラミングをするとき、美しく輝かしいスクリプト言語が自由に使えるのに、なぜ醜く悪いスクリプト言語を使いたがるのでしょう?実際、これはより一般的な質問です。ほとんどすべての言語でプログラミングするとき、JythonやIronPythonが自由に使えるのに、なぜ醜くて悪いスクリプト言語を使いたがるのでしょうか?

そこで、おさらいですが 練習 PythonでもJavaと同じようにDI/IoCが重要であり、その理由は全く同じです。その理由は 実装 しかし、DI/IoCは言語に組み込まれており、非常に軽量であるため、完全に消えてしまうこともよくあります。

(ローカル変数とレジスタをメモリに保存し、リターンアドレスをどこかに保存し、呼び出すサブルーチンの命令ポインタを変更し、サブルーチンが終了したら何らかの方法で自分のサブルーチンにジャンプして戻れるように手配し、呼び出し側が見つけられるような場所に引数を置き、といった具合です(ここで簡単に例えを挙げますと、アセンブリではサブルーチン呼び出しはかなり大きな作業です。アセンブリでは、サブルーチン呼び出しはデザインパターンの1つであり、Fortranのようにサブルーチン呼び出しが組み込まれた言語が登場する以前は、人々は独自のサブルーチンフレームワークを構築していました。サブルーチンフレームワークを使わないからといって、Pythonでサブルーチンコールが"uncommon"だと言えるでしょうか?)

ところで、DIを論理的な結論に導くための例として、次のものを見てみましょう。 ジラード・ブラチャ 's ニュースピークプログラミング言語 とその著作を紹介しました。