大きなモジュールを分割することによる悪影響はありますか?[閉まっている]


21

私はgithubプロジェクトをブラウズしていて、1万行を超えるこのモジュールを見つけました。

単一のモジュールにそのようなコードを含めることは一般的な習慣ですか?

これは複数のモジュールに分割する必要があるように思えます。データベースエンジンごとに1つかもしれません。

開発者は、このような1つの巨大なモジュールを作成すること(「すべてを1か所にまとめる」以外)からどのようなメリットを得ますか?


8k行ではない-確かに!
BЈовић

4
モジュールのサイズではなく、使用方法です
...-jmq

4
プログラムは人間が読むことを意図しており、偶然にコンピューターが実行することのみを目的としています -Donald Knuth。
マフムード

1
モジュール/サブモジュールは、1つの特定のことを行うことになっています。Pythonで2つの数値を追加する(愚かな)モジュールは2行のみです。より複雑なことを行うモジュールは、間違いなく大きくなります。モジュール/サブモジュールを1つの機能のみに制限すると言います。あなたのベンチマークとしてそれをケップ。
-c0da

オブジェクト指向コードのはるかに重要な点は、関心の分離と極端な乾燥を備えた、適切に組織化されたクラス構造を持つことです。モジュールを分割するのは簡単な部分です。
Acumenus 14年

回答:


14

あなたが遭遇したのは、いわゆる「神オブジェクト」です。なぜなら、それはすべてを行うか、すべてを知っているからです。それから逃げます(可能な場合)。

モジュールごとにLOCの数は明確ではありませんが、コードを簡単に参照し、メソッドの実行内容を簡単に理解できるものでなければなりません。私の個人的な経験から、モジュールが1k行*を超えると、何か間違ったことをしていることになります。

* 1kラインモジュールでさえ非常に大きい。


9
与えられた例はGodオブジェクトではなく、実際にはdoctestを含むクラス階層全体であり、たまたま単一の.pyファイルにあります。これは理想的ではないかもしれないが、あなたはこれをしたいかもしれない実用的な理由があるとしてBillThorが示唆、コード自体がそうでない場合は、合理的にうまく構成されています。確かに、God Objectの古典的な定義には適合しません。かなり複雑な仕事があり、多くの異なるシナリオに適応する必要があるものだけです。
マークブース

6

これは、通常のサイズ制限が適用されないモジュールのようです。機能の大部分は、コードとコメントの最初の2k行にあります。ファイルの残りの部分は、モジュールに密結合しているように見える多くのアダプタクラスと他のサポートクラスのようです。他の言語では、クラスは適切なサイズの個別のファイルになります。

いくつかのdoc文字列は便利かもしれませんが、すでに大きなモジュールのサイズが大きくなります。コードは明確で、必要に応じて適切なコメントとともに自明です。


5

もちろん、実際の「制限」は、プロジェクトと多数の要因によって異なります。

しかし、私は大雑把に言って、200行の適切なPythonです。つまり、Pythonで記述されたCまたはJavaコードはありませんが、Pythonでの優れたPythonです。


1

ワオ。

この質問に対する完全な答えはわかりませんが、「Pythonモジュールはどれくらいの大きさですか?」というタイトルの質問に対する答えとして考えるのが好きです。秘密を隠すパルナスの概念として。この場合、モジュールはそれを適切に行うようです(そして、それはそれが隠しているような大きな秘密です)。

結合と結合に関する多くのことを話している論文を後で掘り下げてきました。多くのdbモジュールがあると、モジュール間の呼び出しが多すぎて、悪い習慣と見なされるもの、つまり凝集度が低くなり、結合が大きくなる可能性がありますか?

私は、優れた慣行が何であれ、シンプルさと理解のために、優れた慣行を犠牲にすることを決定するプログラマーに関する実験データを見てきました。実際、グッドプラクティスにも矛盾が生じる可能性があります。たとえば、パフォーマンスは通常、後でメンテナンスを行う人を幸せにするものではありません。このような大きなモジュールを使用すると、この場合に読みやすさがどのように改善されるかはよくわかりません。

私が気づいたもう一つのことは、コードの一部がジェネリックとして記述されており、残りのdbはそれから拡張されているということです。私はPythonプログラマーではありませんが、おそらくこれは何かを正当化できるでしょうか?

したがって、最終的な答えはありませんが、誰かがこれらのポイントを強調することを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.