一部の機能を関数、モジュール、パッケージに分割する推奨される方法は?

StackOverflow https://stackoverflow.com/questions/1168565

  •  19-09-2019
  •  | 
  •  

質問

比較的大規模なプロジェクトでは、機能をさまざまな機能に分割し、次にさまざまなモジュール、さらにさまざまなパッケージに分割することを考える必要がある場合があります。場合によっては、異なるソース ディストリビューションにまたがる場合もあります (例:optparser などの共通ユーティリティを別のプロジェクトに抽出します)。

問題は、同じモジュールに配置する部品と別のモジュールに配置する部品をどのように決定するのでしょうか?パッケージについても同じ質問です。

役に立ちましたか?

解決

私はどのように多くのPythonのクラスを入れる必要がありますを参照してください。 1つのファイルですか

クラス定義の全体的なセットをスケッチします。

"モジュール" にこれらのクラス定義を分割ます。

互いに別々のモジュールを実装し、テストします。

あなたの最終的なアプリケーションを作成するために一緒にモジュールをニットます。

。これは、有機的に進化して動作するアプリケーションを分解することはほぼ不可能です。だから、それをしないでください。

早期かつ頻繁にあなたのデザインを分解する。別々のモジュールをビルドします。アプリケーションを構築するために統合します。

他のヒント

デビッド・パルナスは、「モジュールにシステムを分解に使用する基準に」と呼ばれることにより、古典的な論文があります。それは古典的だ(と一定の年齢を持っているので、少し時代遅れすることができます)。

たぶん、あなたはそこから起動することができ、PDFはこちらです。

http://www.cs.umd.edu/クラス/ spring2003 / cmsc838p /デザイン/ criteria.pdfする

ペンと紙を取り出し。お使いのソフトウェアは、ハイレベルでの対話方法を描くようにしてください。多分彼らが使用する技術のどのような種類によって、機能や目的別などのグループ項目ソフトウェアの異なる層を描画します。お使いのソフトウェアが複数の抽象化レイヤーを持っている場合、私はそのことで、グループにそれらを言うでしょう。高いレベルでは、特定の層の要素はすべて同じ一般的な目的を共有します。今、あなたは層内のソフトウェアを持っていることを、あなたは、特定の機能または専門に基づいて、異なるプロジェクトに、これらの層を分割することができます。

あなたがこれを行うべきではあなたが届く特定の段階については?あなたがコードベースに取り組んで複数の人を持っている場合、またはあなたが可能な限りモジュラーとして、プロジェクトを維持したい場合は私が言うと思います。うまくいけば、あなたのコードはでこれを行うのに十分なモジュール化されています。あなたがハイレベルにソフトウェアをばらばらにすることができない場合は、お使いのソフトウェアは、おそらくスパゲッティコードであり、あなたはそれをリファクタリングをご覧ください。

うまくいけば、それはあなたで動作するように何かを与えるだろう。

私見以前開発プロセスの物事のこの必要があり、おそらく1。私は、大規模なプロジェクトで働いたことはないが、それはあなたが行って、どこするために何が起こっているかのロードマップを作る意味になるだろう。 (間違っ作っようにそれについて尋ねるためにあなたをリブしようとしていない:Dを)

モジュールは、一般的な目的や機能によって、何とかグループ化されています。あなたは、各インタフェースの実装、または他の接続を試みることができる。

私もあなたに同情します。あなたは自己不信に苦しんでいます。心配しないで。母国語を含む任意の言語を話すことができれば、自分でモジュール化を行う資格があります。その証拠として、「言語本能」または「数学本能」を読んでください。

周りを見回してください。しかし、あまり多くはありません。彼らから多くのことを学ぶことができますが、悪いこともたくさん学ぶことができます。

  1. 一部のプロジェクト/フレームワークは誇大宣伝の対象になります。しかし、機能のグループ化の中には、モジュールに付けられた名前さえも誤解を招くものがあります。プログラマーの「意図」を明らかにするものではありません。これらは「高い凝集性」テストに合格しません。

  2. 本も同様です。本を選ぶ際には 80/20 ルールを適用してください。Capers Jones の 2010 年の『ソフトウェア エンジニアリングのベスト プラクティス』のような、非常に完全でよく研究された優れた本でさえ、まったく無知です。10 人のアジャイル/XP チームは、Windows Vista を開発するには 12 年、ERP パッケージを作成するには 25 年かかると言われています。2009 年まではセグメンテーション (モジュール化の用語) の方法は存在しなかったと述べています。役に立たないと思います。

私のポイントは次のとおりです。モデル、参考資料、例のソースは慎重に選択する必要があります。有名人を過大評価したり、自分自身を過小評価したりしないでください。

これが私の経験で証明された私の助けです。

  1. それは、どの属性をどの DB テーブルに割り当てるか、どのプロパティ/メソッドをどのクラス/オブジェクトに割り当てるかを決定するのとよく似ています。もっと深いレベルで言うと、家で家具を並べたり、本を棚に並べたりするのとよく似ています。あなたはすでにそのようなことを行っています。ソフトウェアは同じなので、大した問題はありません。

  2. まずは「密着性」を重視しましょう。例えば本 (レフ トルストイ、ジェームス ジョイス、DE ローレンス) は自由に選択できます (HTML、CSS、ジョン キーツ。jQuery、tinymce) ではありません。そして、物事をアレンジする方法はたくさんあります。これに関しては分類学者の間でも今でも深刻な争いが続いている。

  3. 次に、「カップリング」を心配します。 「恥ずかしがり屋」になりなさい。「見知らぬ人と話さないでください。」過度に優しくしないでください。パッケージ/DB テーブル/クラス/オブジェクト/モジュール/ブックシェルフを自己完結型で、可能な限り独立したものにするようにしてください。Joel は、あらゆる外部依存関係を嫌い、独自のコンパイラさえ構築した Excel チームに対する賞賛について語っていました。

実際には、作成するプロジェクトごとに異なりますが、例を次に示します。

  1. core パッケージには、プロジェクトに欠かせないモジュールが含まれています。これにはアプリケーションの主要な機能が含まれる場合があります。
  2. ui パッケージには、ユーザー インターフェイスを処理するモジュールが含まれています。つまり、UI をコンソールから分割した場合です。

これはほんの一例です。そして、どれをどこに行くかを決めるのは実際にはあなたです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top