web-dev-qa-db-ja.com

Java / Java EE Webアプリケーションを設計および設計する方法は?

私はJava Struts、Spring、Hibernateでほぼ5年の経験を持つ開発者です。

数日中に新しいプロジェクトが予定されています。完全な要件があり、Spring MVC、Spring、およびHibernateを使用してこのプロジェクトを実行します。

Webアプリケーション全体の設計と設計を依頼されました。アーキテクトの設計と作成は、私のキャリアの中で今までしていないことです。そして、私はこれをどのように始めるのか、どこから始めるのか、どのツールを使用するのかなどを知りません。私はデザインとアーキテクチャのA、B、Cさえも知りません。

そもそもなぜこれを行うように頼まれたのかと疑問に思われるかもしれません。大切なことは、これを行う機会が与えられ、すべての段階で監視され、先輩にデザインをレビューしてもらうことです。

そのため、提案、アイデア、および開始して先に進むための手順を歓迎します。

52
ashishjmeshram

私は自分の経験から2セントを追加することができます(開発のベストプラクティスをまとめたものですが、アプリケーションの設計中にそれらを念頭に置いておくと便利かもしれません)。

  • 万能のデザインはありません
  • アプリケーションをできるだけ軽量に保つようにしてください。
  • Maven/Gradleを使用して依存関係を管理します
    • IDEに過度に依存しないでください。プロジェクトがIDEなしでビルドされていることを確認してください(maven/gradleを使用している場合、次のようになります:) IDEA、Netbeans、Eclipseでプロジェクトを開いてみてください。
  • 上記の技術については、appfuseが出発点として適切です。
  • 最初にデータベース/エンティティを設計する
  • ライブラリを賢明かつ慎重に使用してください。それらを使いすぎないでください。
  • JUnit/TestNGの作成を忘れないでください(少なくともサービス層用)
  • すべての主要なブラウザでアプリケーションをテストします(お気に入りのブラウザだけでなく:)
  • Webアプリの合計ユーザー数と同時ユーザー数を決定します。
    • 次に、キャッシュが必要かどうかを決定します。
    • アプリサーバークラスタリングを使用するかどうか。
  • その機能と、さらに重要な「あなたのニーズ」に基づいて、アプリケーションサーバーを選択します。
    • ほとんどの場合、Tomcat/Jettyはまったく問題ありません
  • アプリサーバー固有のAPIの使用を避ける
  • JPA実装としてhibernateを使用している場合でも、JPAインターフェース/注釈を使用します
  • エンティティの関係をマッピングするときは、特に注意してください。どのプロパティとリレーションシップが遅延してロードされ、どれが熱心にロードされるかを決定する
  • アプリの設計中は、アプリケーションのセキュリティを念頭に置いてください。 Springセキュリティは優れた選択肢です。
  • HttpSessionを乱用しないでください。あまり多く保管しないでください。
  • エンティティをシリアル化可能にします。開発者にtoString()、hashCode()、equals()の使用を強制する
  • 1日目からバージョン管理を使用することを忘れないでください
  • Spring/hibernate/spring-mvcが最適だと思い込まないでください。少なくとも3〜4つのオプションを使用して、小さな概念実証を作成します。
  • JenkinsなどのCIツールとの統合/ビルド/デプロイを自動化してみてください
  • Hibernateによって生成されたSQLの確認と調整(時々)
  • ビジネスロジックをビューレイヤーに忍び込ませないでください。 jspスクリプトレットが嫌いですか? Velocity/Freemarkerを検討してください。 JSPは唯一のオプションではありません。
  • springのPropertyPlaceholderConfiguratorを使用して、環境固有の構成を外部化します。
  • 可能であれば、独自に作成するのではなく、既存のユーザー認証メカニズム(LDAP/OpenIDなど)と統合してみてください。これにより、車輪を再発明したり、ユーザーが別のユーザー名とパスワードのセットを覚えたりする必要がなくなります。
122
kunal

アーキテクチャ設計ドキュメントに必要なものがいくつかあります。簡単な作業ではありませんが、チャンスをつかむための小道具です。これは非常に大きな質問であるため、これらのリンクがあなたを開始し、あなたが足を濡らした後に質問を洗練できることを願っています。

方法論

使用する方法は、最初に行うタスクに影響します。 Waterfall は、一般的ですが時代遅れの方法です。新しい方法論は、いくつかの面を持つアジャイルです。私のお気に入りは、あらゆるサイズのソフトウェアを開発するための Scrum Agile です。

ダイアグラム

は、システム全体および個々のコンポーネントとして最も強力な方法の1つです。作成する図のタイプはシステムによって異なります。通常、構造図、動作図、相互作用図、その他多数の図があります。これらの図は、システム全体、各コンポーネントの物理レイアウトおよび/または論理レイアウト、通信フロー、手順フローなどを示しています。

ドキュメント

ドキュメントは、プロジェクトの説明、範囲、ユーザーケース、シーケンス図、およびプロジェクトまたはプロジェクトの一部を説明するその他のドキュメントを含むドキュメントやドキュメントのように聞こえます。

13
Spidy

ロバート・マーティン(別名ボブおじさん)のクリーン建築をご覧ください。 Here's 概要このアプローチを使用すると、SpringやHibernateなどの詳細を後回しにすることができ /できるようになり、ビジネスロジックにもっと集中できます。または、SpringからJava EEに移行します。ビジネスおよびアプリケーションロジックに触れることはありません。SOLID原則、追加の労力が多すぎます。

この方法でアプリケーションを作成したばかりで、とても満足していると言わざるを得ません。デスクトップやモバイルアプリケーションに簡単に移植したり、ストレージモジュールを交換したりできます。ポリシーに応じた詳細は大いに役立ちます。また、APIのような方法で思考を促進し、正しく適用されると、モジュールを非常に再利用可能にします。

Martinは、フレームワークのような詳細は迷惑であり、アーキテクチャの一部ではないと言っています。彼らは建築に属していると思いますが、ただ異なるレベルにあります。多くの場合、初期段階でフレームワークを含めて、作業アプリケーションの薄いスライスを作成してユーザーにデモできるようにします。または、私の場合のように、フレームワークを事前に知っていて、それらについての議論がない場合。ただし、組み合わせてアプリケーションアーキテクチャを作成すると、個別のソフトウェアアーキテクチャと見なすことができます。

4
Dormouse

「十分な」モデリングを推進するアジャイルモデリングサイトを熟読してください。要件収集から設計/開発までの完全な「アジャイルモデリングプロセス」を含む優れたガイドラインがあります。

http://www.agilemodeling.com/

http://www.agilemodeling.com/essays/amdd.htm

http://www.agilemodeling.com/essays/agileArchitecture.htm

http://www.agilemodeling.com/essays/agileAnalysis.htm

http://www.agilemodeling.com/essays/agileDesign.htm

ツールに関しては、ビジュアルパラダイムが大好きです。 (他のツールと比較して)比較的安価です。さまざまな無料のモデリングツールがあります(グーグルはあなたの友人です)が、Visual Paradigmに匹敵するものはありません。私の雇用主がそれのための現金をポニーしなかったら、私はそれを自分で買うだろう... :)

4
squawknull