web-dev-qa-db-ja.com

Javaアプリケーションの設計方法は?

Javaアプリケーション[シンプルコンソールアプリからJ2EEアプリへ]]を設計する際に留意すべき一般的なガイドラインとベストプラクティスは何ですか。

こんにちは

私は最近、Javaプログラミングチュートリアルと実践的なコアJavaのプログラミング経験があります)を完了しました。これで、継承、抽象化、多態性、カプセル化

Javaコードは問題なく作成していますが、アプリケーションの設計がよくわかりません。これが私の主な問題です:アプリケーションの「設計」です。アプリケーションを作成するタスクを指定した場合Javaでは、何から始めればいいですか?どう考えればいいですか?クラス階層の開発中に従うべき公式/非公式のガイドライン?私は本当に混乱しています(抽象クラ​​ス、インターフェース、またはサブクラス..?)。コードを書く前に、すべて?

私のような人々にとって、新しいJavaアプリケーションの開発を開始する際に従うことができる一連の一般的なガイドライン/ベストプラクティスを用意することは非常に役立ちます。

私が読んだり使用したりするべきいくつかのガイドライン/考え/本/リソース/ツールを提供してください

事前に感謝スコット

23
Dushyanth

さまざまなドメインにさまざまなJavaアプリが存在するため、本当に一般的なアドバイスをすることは困難です。しかし、絶対に推奨される本は、Eric Evansによる Domain Driven Design です。簡単な紹介については Wikipedia も参照してください。

一般的なアドバイス:

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

私の意見では、すべては以下に会うことに要約されます

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

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

  1. フォロー レイヤードアーキテクチャ
  2. レイヤー内およびレイヤー間で SOLIDの原則 に従います。すべてのデザインパターンは、これらの原則を達成するために役立つ方法です。 SRP:単一の責任の原則、OCP:オープンクローズの原則、LSP:リスコフの置換の原則、ISP:インターフェースの分離の原則、DIP:依存関係の逆転の原則
  3. DRYおよびKISS原則

これらのガイドラインと原則は、プログラミングのパラダイムや言語から独立しています。ただし、OOP言語は、これらの実装を容易にします。

5

GRASP原則 をご覧になることをお勧めします。これは、優れた設計基準スキルを提供します。

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

  • DDD:ドメイン駆動設計
  • SDD:サービス駆動設計
  • MDA:モデル駆動型アーキテクチャー(コードとアーキテクチャーはUMLモデルから抽出されます)
  • TDD:テスト駆動開発(検証テストはアプリケーションの前に実装されます)

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

J2EEでは、SDDが最も使用されていると言えます(現在、最適なソリューションであるかどうかは不明ですが、非常に「正規化」されています):サービス(ソフトウェア「インテリジェンス」)>ドメイン(永続性)> DAO(永続性)。

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

3
Benoit Courtine

スタックオーバーフローへようこそ。 Javaに慣れている場合は、 Head First Design Patterns。 および Head First Object-Oriented Analysis and Design をお読みください。

2
ring bearer

ボールが正しい方向に回転するUMLクラス図を調べ​​てから、ギャングオブフォーデザインパターンを見てみましょう。これは優れた最初のステップです。

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

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

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

http://www.springsource.org/

1
Ayubinator

TDDを使用した新しいデザインをお勧めします。

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

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

言語に慣れると、最初の一般的なデザインは、プログラムに対してはるかに効率的な方法で適合します。

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

1
Mustafa Zengin

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

1
JRL