[解決済み】PythonでIoC / DIが一般的でないのはなぜ?
質問
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コンテナは何をするものなのでしょうか?それは、次のことを可能にすることです。
- 独立したコンポーネントを結合して完全なアプリケーションにする ...
- ... ランタイムに
wiring together"とquot;at runtime"という名称があります。
- スクリプティング
- ダイナミック
つまり、DIコンテナは動的スクリプト言語のインタプリタに過ぎないのです。つまり、典型的なJava/.NETのDIコンテナは、XMLベースの構文を持つ、ひどい動的スクリプト言語用のくだらないインタプリタに過ぎないということです。
Pythonでプログラミングをするとき、美しく輝かしいスクリプト言語が自由に使えるのに、なぜ醜く悪いスクリプト言語を使いたがるのでしょう?実際、これはより一般的な質問です。ほとんどすべての言語でプログラミングするとき、JythonやIronPythonが自由に使えるのに、なぜ醜くて悪いスクリプト言語を使いたがるのでしょうか?
そこで、おさらいですが 練習 PythonでもJavaと同じようにDI/IoCが重要であり、その理由は全く同じです。その理由は 実装 しかし、DI/IoCは言語に組み込まれており、非常に軽量であるため、完全に消えてしまうこともよくあります。
(ローカル変数とレジスタをメモリに保存し、リターンアドレスをどこかに保存し、呼び出すサブルーチンの命令ポインタを変更し、サブルーチンが終了したら何らかの方法で自分のサブルーチンにジャンプして戻れるように手配し、呼び出し側が見つけられるような場所に引数を置き、といった具合です(ここで簡単に例えを挙げますと、アセンブリではサブルーチン呼び出しはかなり大きな作業です。アセンブリでは、サブルーチン呼び出しはデザインパターンの1つであり、Fortranのようにサブルーチン呼び出しが組み込まれた言語が登場する以前は、人々は独自のサブルーチンフレームワークを構築していました。サブルーチンフレームワークを使わないからといって、Pythonでサブルーチンコールが"uncommon"だと言えるでしょうか?)
ところで、DIを論理的な結論に導くための例として、次のものを見てみましょう。 ジラード・ブラチャ 's ニュースピークプログラミング言語 とその著作を紹介しました。
- 有害と思われるコンストラクタ
- 致死性注射
- 輸入の禁止 ( 継続 )
関連
-
python call matlab メソッドの詳細
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない