22

.NET を使い始めて以来、ヘルパー クラスまたは部分クラスを作成して、コードを配置し、独自の小さなコンテナーなどに格納するようにしています。

私が知りたいのは、可能な限りクリーンで洗練されたコードを作成するためのベスト プラクティスです。

明らかにきれいなコードは主観的なものですが、ポリモーフィズム、継承、インターフェイス、クラスなどの (使用方法ではなく) いつ使用するか、およびクラスをより適切に設計する方法 (単に「 DatabaseHelper」、コードのこの悪い習慣は wiki のにおいがすると考える人もいました)。

この種の意思決定に役立つリソースはありますか?

私は CS やソフトウェア エンジニアリングのコースを開始したことすらなく、実際の教育リソースはかなり限られていることを心に留めておいてください。

4

10 に答える 10

23

私にとって本当に目を見張るものは、 Refactoring: Improving the Design of Existing Code :

適切なトレーニングを受ければ、熟練したシステム設計者は、悪い設計を取り上げて、適切に設計された堅牢なコードに作り直すことができます。この本では、Martin Fowler が、リファクタリングの機会が一般的に見られる場所と、悪いデザインを良いデザインに作り直す方法を示しています。

リファクタリング http://ecx.images-amazon.com/images/I/519XT0DER6L._SL160_PIlitb-dp-arrow,TopRight,21,-23_SH30_OU01_AA115_.jpg

コードを効率的かつ体系的にリファクタリングするのに役立ちました。また、他の開発者との話し合いで、holy code変更が必要になったときに大いに役立ちました...

于 2008-10-02T12:26:25.080 に答える
11

Jeff Atwood が、リファクタリングとコードの匂いに関する素敵なブログ投稿を作成しました。ぜひチェックしてみてください。

.NET でコードをリファクタリングすると、理解するのに時間がかかります。リファクタリングを効果的かつ無慈悲に行うには、オブジェクト指向の設計原則(または設計技法) をいくつか知っておく必要があります。

つまり、コードの臭いを取り除き、変更を容易にするためにコードをリファクタリングします。また、無理をしないでください。

于 2008-10-02T12:39:39.823 に答える
5

これはClean Codeという本のスラッシュドットに関するレビューです。

本は明らかに少し乾いているようですが、とても良いです。

于 2008-10-02T12:25:29.263 に答える
2

Martin Fowler のコメントとRefactoringに関する本をチェックしてください。

于 2008-10-02T12:23:24.637 に答える
1

ドメイン駆動設計をお勧めします。YAGNI と AlwaysRefactor の原則は単純化されていると思います。この問題に関する古くからの質問は、「if(someArgument == someValue)」を関数にリファクタリングするか、インラインのままにするかです。

はいまたはいいえの答えはありません。DDD は、テストがビジネス ルールを表している場合は、リファクタリングすることをお勧めします。リファクタリングは再利用だけではなく、意図を明確にすることです。

于 2008-10-02T12:48:28.210 に答える
1
  • 問題が発生している場合は、コードをリファクタリングします。パフォーマンス、スケーラビリティ、統合、メンテナンスなど、必要なときに多くの時間を費やせるような問題は何でも構いません。壊れていない場合は、きれいではない、または最新の基準に準拠していないと思われる場合でも、修正しないでください。
  • コードを完璧にするために時間をかけすぎないでください。完璧を達成することはできませんが、そうするために多くの時間を費やすことができます。収穫逓減の法則を思い出してください。
  • プロジェクト内では、コードに依存する機能に実際に取り組んでいるときにのみ、コードをリファクタリングします。つまり、「アップロード メカニズムを変更する」または「ファイル アップロードのバグを修正する」ための反復呼び出しのユーザー ストーリーがある場合は、ファイル アップロード コードをリファクタリングできます。ただし、ユーザー ストーリーが「ファイル アップロード UI デザインの改良」に関するものである場合は、ビジネス ロジックには立ち入らないでください。
于 2008-10-02T12:40:39.977 に答える
1

『レガシー コードを効果的に扱う』は、このテーマに関して私が読んだ中で最高の本の 1 つです。

本のタイトルから遠ざかってはいけません - リファクタリングを正式な概念として扱うのではなく (それはその場所にあります)、この本には、「なぜ私はそれを考えなかったのか」という単純なヒントがたくさんあります。「クラスを通過し、そのクラスに直接関連付けられていないメソッドを削除して、別のクラスに配置する」などです。

たとえば、グリッドと、そのグリッドのレイアウトをファイルに保存するためのコードがあります。おそらく、レイアウト永続化コードを別のクラスに安全に移動できます。

于 2008-10-02T16:12:34.257 に答える
0

http://www.refactoring.com/にリファクタリング専用のWebページがあります。リファクタリング関連の問題を議論するためのメーリングリストだけでなく、リファクタリングコードのトピックに関するその他のリソースへの多くの参照を備えています。

最後になりましたが、Martin Fowlerによる(非常に推奨される)リファクタリングの本に書かれているものをはるかに超えた、利用可能なリファクタリングの大きな(そしてまだ成長している)カタログがあります。

于 2009-07-22T12:28:40.130 に答える
0

Code Complete のコピーを入手したところ、これに関するセクションがあることがわかりました。

受け入れられた回答の本をまだ読んでいますが、Code Complete から学んだことは、クラスの設計に関する私の考え方を劇的に改善しました。

今日まで、私は ADT (抽象データ型) が何であるかを知りませんでしたが、今ではカプセル化に準拠したクラスを開発する方法を知っています。

于 2008-10-03T10:38:51.340 に答える