24

What are the general guidelines and best practices to keep in mind while designing Java application [Simple console apps to J2EE apps]?.

Hi

I recently completed Java programming tutorial from Sun and practised core java (I have previous programming experience). Now I understand the basics of Inheritance, Abstraction , Polymorphism,Encapsulation

Now i am writing Java code without much difficulty, but am not sure of application design. This is my main problem: "DESIGNING" the application. Say if i have given a task to create an application in Java, What should I start up with? How to think about? Any formal/informal guidelines I should follow while developing class hierarchies? I am really confused (abstract class or interface or sub class..?). Should I start by model everything, before writing code?

It would be very useful for people like me to have a SET OF GENERAL GUIDELINES/BEST PRACTICES, which we can follow while start developing a new java application.

Please provide me some guidelines/thoughts/books/resources/tools I should read or Use

Thanks in advance Scott

4

9 に答える 9

14

さまざまなドメインに非常に多くのさまざまなJavaアプリがあるため、実際に一般的なアドバイスを提供することは困難です。ただし、絶対にお勧めの本の1つは、 EricEvansによるドメイン駆動設計です。簡単な紹介については、ウィキペディアも参照してください。

一般的なアドバイス:

  • すべてを前もって設計しようとしないでください-コーディングを開始し、問題のドメインと実装の理解が深まるにつれてリファクタリングできるように、適度に優れた設計を行ってください
  • 難しい問題を、1つずつ取り組むことができる小さなパーツ/ステップ/モジュールに分割してみてください
  • 問題のドメインを(多かれ少なかれ)モデル化し、問題の解決/タスクの処理に協力する、明確に定義された責任を持つオブジェクトの観点から考えてみてください
  • デザインが上手になるには、何よりもまず練習が必要です。間違いをすることを恐れないでください。ただし、そうするときは、それらを分析し、できる限り多くのことを学びます。
  • デザインパターンを学びますが、熱心になりすぎないでください。問題を本当に解決し、コードをよりクリーンにする場合にのみ使用してください。
于 2010-07-09T14:38:29.533 に答える
5

私の意見では、それはすべて以下を満たすことに要約されます

  1. わかりやすい
  2. 維持と進化が容易
  3. プロジェクトに貢献できる複数の開発者 (ほとんど並行して)

上記を達成するために、経験に基づいて専門家によって提案された特定のガイドラインと原則があります。

  1. 階層化されたアーキテクチャに従う
  2. レイヤ内およびレイヤ間でSOLID の原則に従います。すべての設計パターンは、いずれかの方法でこれらの原則を達成するのに役立ちます。SRP: Single Responsibility Principle、OCP: Open Closed Principle、LSP: Liskov Substitution Principle、ISP: Interface Segregation Principle、DIP: Dependency Inversion Principle
  3. DRYとKISSの原則

これらのガイドラインと原則は、プログラミング パラダイムや言語から独立しています。ただし、OOP 言語を使用すると、これらをより簡単に実装できます。

于 2010-07-09T15:56:08.550 に答える
3

GRASPの原則を確認することをお勧めします。これにより、優れた設計基準スキルが得られます。

于 2011-11-12T20:28:40.193 に答える
3

さまざまなパラダイムがあります (非常に多くの場合、3 文字の頭字語) :

  • DDD : ドメイン駆動設計
  • SDD : サービス主導の設計
  • MDA : モデル駆動型アーキテクチャ (コードとアーキテクチャは UML モデルから抽出されます)
  • TDD : Test Driven Development (申請前に検証テストを実施)

これらのキーワードを使用すると、Web 上で多くの情報を見つけることができます。

J2EE では、SDD が最も使用されていると言えます (最適なソリューションであるかどうかはわかりませんが、現在では非常に「正規化」されています)。持続性) > DAO (持続性)。

現在、DDD はますます使用されるようになっています。その概念は、「ソフトウェア インテリジェンス」レイヤーを使用しているドメイン オブジェクトに再び焦点を当てています。

于 2010-07-09T14:49:35.867 に答える
2

スタック オーバーフローへようこそ。Java に精通している場合は、Head First Design Patterns をお読みください。 そして Head First Object-Oriented analysis and design -er、逆の順序かもしれません:)

于 2010-07-09T14:44:27.023 に答える
1

おそらく、あなたがやろうとしていることは以前に行われていることです - 少なくとも似たようなことです。幸いなことに、最近はオープンソースのものがたくさんあります。したがって、まったくわからない場合は、同じことを行ういくつかのオープンソース アプリケーションをダウンロードして調べることができます。それはあなたに良いスタートを与えるはずです。

于 2010-07-09T14:52:52.307 に答える
1

まず、ボールを正しい方向に転がす UML クラス図を調べ​​てから、Gang of Four 設計パターンを見てください。それは素晴らしい第一歩です。

http://en.wikipedia.org/wiki/Class_diagram

http://en.wikipedia.org/wiki/Design_Patterns

最後に、Spring Framework のような優れたオープン ソース コードを追加します。

http://www.springsource.org/

于 2010-07-09T14:39:59.363 に答える
1

TDD を使用した緊急設計をお勧めします。

Java 設計に固有のものは何もないと思います。オブジェクト設計について既に知っている場合は、すぐに使用できます。

于 2010-07-09T14:46:22.593 に答える
1

設計なしですぐにコーディングを開始しないでください。しかし、これは、コーディングの前にすべてを設計する必要があるという意味ではありません。これまでの経験上、修正の必要のないデザインはありえなかったからです。特に、プログラミング言語に慣れていない場合は、使用している言語の機能と利用可能なライブラリに応じて設計が変わります。私のアドバイスは、継承、ポリモーフィズム、カプセル化などのオブジェクト指向設計の最も重要な側面に基づいた一般的な設計を持つことです。この一般的な設計とプログラミング中に遭遇するニーズから始めて、それに応じて設計を修正してください。

その言語で経験を積むほど、最初の一般的な設計がプログラムにはるかに効率的に適合するようになります。

ほとんどの人は、1 つのオブジェクト指向設計は任意のオブジェクト指向言語で記述できるべきだと言いますが、そのような非常に優れた汎用設計を作成するのはそれほど簡単ではありません。より現実的に言えば、特定の設計を実装するために使用される言語を無視することは、私が考える限り良い方法ではありません。

于 2010-07-09T14:50:08.850 に答える