2009-05-10 13 views
15

私の質問はこの1つに関連しています:Python tool that builds a dependency diagram for methods of a classOOP:良いクラスデザイン

私はコンパイルモジュールを使いました。ソースコードを抽象ソースツリーに解析し、クラスメソッド間の依存関係を収集するために歩いてきました。私のスクリプトはgraphvizの入力ファイルを生成しました。これはthisのような依存関係グラフを生成するために使用されました。

この時点で私は立ち往生しています。クラスをどのようにリファクタリングして複雑さを軽減するかわからないことに気付きました。私は単に私が何を目指すべきか分かりません。たとえば、リレーショナルデータベースの理論では、データベースを通常の形式にするために使用されるいくつかの簡単なルールがあります。良いクラスデザイン(そのメソッド間の依存関係の観点から)に関するいくつかの同様の理論はどうでしょうか?このトピックはどこかでカバーされているので、私はそれを勉強することができますかクラスを設計する際

答えて

29

私たちは、以下の原則に従います。

編集:デザインパターンは、コードがこれらの原則を遵守するのに役立ちます。私は最初に原則を理解してパターンを見て、そのパターンが原則に沿ってコードをどのようにもたらすのかを理解することが非常に役立つことを発見しました。

+0

原則は、理解しにくい場合もあります。一部の人々は、設計パターンが簡単に始めることができることを知っています。 –

+2

あなたが言っていることは本当ですが、原則を理解することなくパターンを使用することは、「パターン乱用」が原因であると思います。 – Trumpi

3

クラスデザインに関しては、「正しい」か「間違っている」と言うことはできません。このトピックについては、多くのガイドライン、パターン、勧告などがありますが、終わりには、過去のプロジェクトの経験について多くのことがあります。私の経験では、心配しなくても、少しずつコード/構造を徐々に改善するのが最善の方法です。試して、いくつかのアイデアや変更がどのように感じられるかを見てみましょう。もちろん、他者から学ぶことは常に良い考えです。多くのコードを読んで分析して、理解しようとする。

理論についてお読みになりたい場合は、Craig Larmannsの「UMLとパターンの適用:オブジェクト指向分析と設計と反復開発の紹介」Amazonをお勧めします。彼はあなたの質問のいくつかの部分をカバーし、いくつかの大まかなガイドラインを与え、サンプルアプリケーションを使ってそれらを示します。私は本が好きだった。

どこかにアプリをアップロードできますか?多分、ギターなどで、おそらくあなたはいくつかの具体的なアドバイスを求めることができます。

+1

+1ラーマンの本はかなり良いです。 – duffymo

1

Design Patternsは、優れたクラス設計のデファクトスタンダードになっています。一般に、各パターンには、それが適用される特定のユースケースまたはシナリオがあります。コード内でこれを識別できる場合は、パターンを使用して、より意味のあるものを作成し、通常はより依存性の少ないものを作成できます。

リファクタリングは、これらの徹底的な変更を達成するために使用するツールです。優れたIDEがリファクタリングに役立ちます。

0

各メソッドを簡単にユニットテスト可能にしてください。私はこれが常に私のデザインをより読みやすく/分かりやすくするためのものだと感じています。数多くのOOADルールがあります - SRP, DRY, etc.リファクタリング時にそれらを念頭に置いてください。

0

悪いデザインを良いデザインに繰り返し変換する数多くの実用的な例については、Martin Fowlerの書籍「リファクタリング」をお勧めします。

関連する問題