MVC設計のどこにビジネスロジックを配置しますか?

データフォームを介してデータベースにレコードを追加する単純なMVCJavaアプリケーションを作成しました。

私のアプリはデータを収集し、検証して保存します。これは、データがさまざまなユーザーからオンラインで提供されているためです。データは本質的にほとんど数値です。

データベース(SQLサーバー)に格納されている数値データで、アプリに計算を実行して結果を表示させたいと思います。ユーザーは計算がどのように行われるかに関心がないため、カプセル化する必要があります。ユーザーは、単純な計算データ(たとえば、A列データからB列データをC列データで割ったもの)のみを表示できる必要があります。同じストアドプロシージャを作成する方法は知っていますが、3層のアプリが必要です。

データベースにレコードとして入力し、計算を実行して処理したデータが必要です。元のデータは影響を受けないままである必要がありますが、新しいデータ、計算後は、新しいエンティティレコードとしてデータベースに保存する必要があります。

このバックグラウンド計算のコードはどこに書くべきですか?ルールとビジネスロジックなので、新しいJavaBeansファイルに配置する必要がありますか?

コメント

  • データベースの操作中にOOとテスト可能性を維持する
  • ビジネスロジックは、モデルの実行/操作方法を尋ねるチーム/部門の人の別名です。そのため、'、ビジネスロジックはビジネスロジックという名前の別のクラスに格納できます。同じことがプレゼンテーションロジックにも当てはまります。これは、UIコンポーネントのフォーマットまたは表示方法に関する質問に答えるデザイナーの人の同義語です。プログラムコンポーネントを作成して相互に接続する方法についての知識を表す開発者ロジック(自分で質問して回答するか、同僚に質問する)もあります。

回答

ビジネスロジックモデルであり、太いモデルと細いコントローラー

開始点として、コントローラーロジックから開始する必要があります。例:更新時、コントローラーはコードをメソッド/サービスに転送する必要があります div id = “20b4911d25″>

モデルへの変更を配信します。

モデルでは、 helper /を簡単に作成できます。アプリケーションビジネスルールまたは計算を検証できるサービスクラス。

概念概要

  • コントローラーはアプリケーションロジック用です。アプリケーションが"知識のドメイン"と対話する方法に固有のロジック。

  • モデルは、アプリケーションから独立したロジック用です。このロジックは、それが属する"知識ドメイン"のすべての可能なアプリケーションで有効である必要があります。

  • したがって、すべてのビジネスルールをモデルに配置するのが論理的です。

コメント

  • 明確で簡潔な答えです。
  • @Yusubov、アプリケーションロジックとビジネスロジックの違いを説明してください
  • @Moh、要するに、これらは役立つ流行語です。アプリケーションのテクノロジーの層を説明します。ビジネスロジックは、基本的に機能仕様に従ったシステムのルールです。たとえば、タイプBのオブジェクトAは属性がCとDである必要がありますが、Eは属性がありません。アプリケーションロジックは、JavaサーブレットとOJBを使用してOracleデータベースに永続化するなど、より技術的な仕様です。
  • これらの単語について詳しく説明します:The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer. [ php-html.net/tutorials/model-view-controller-in-php ]
  • 正しいと理解した場合、言及された記事では、'アプリケーションロジック'を

ビジネスロジック'。したがって、ビジネスロジックを参照するものは、コントローラーまたはビューに配置しないでください。

回答

いつものように、それはプロジェクトの複雑さに依存します。

ドメインモデルの複雑さが比較的小さい些細なアプリケーションでは、モデルにロジックを入れて1日と呼ぶことができます。

ただし、複雑なモデルと多くのビジネスルールを使用する重要なアプリケーションの場合は、もう少し分離することをお勧めします。

複数のモデルを含むビジネスロジックをモデルでは、これらのモデル間に緊密な結合を導入しています。アプリケーションが成長し続けると、これらのモデルはgod modelsに変わる傾向があり、知識が多すぎます。そして、これはすぐにテストと保守が難しい大きな混乱に変わります。そのため、その場合は、ロジックを別のレイヤーに配置することが有益です。

抽象化を決定するときは、アプリの複雑さと目的を常に考慮し、過剰なエンジニアリングを避けてください。些細な/小さなアプリケーションの場合、必要以上のレイヤーを導入すると、複雑さが軽減されるのではなく増加します。

Robert Martin(Uncle Bob)は、このテーマに関する優れたブログ投稿を公開しています:クリーンアーキテクチャ

コメント

  • 質問はMVCに固有のものでした。ビジネスロジックは常にモデルに含まれている必要があります。コントローラは単なるアダプタです。
  • MVCは、業界で最も過負荷の用語の1つです。私は'本を正当化するので、この用語の癖に乗りたくありません。ただ、MVCを使用しても'は、すべてのロジックをモデルに配置する必要があることを意味しません。
  • Steve Burbeck(Smalltalkチーム)による定義から:The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate。これは'アダプタの定義です。
  • すべてのロジックをモデルに配置すると、数千行の保守不可能な混乱が発生します。行ったことがある。 'ユーティリティクラスとサービスレイヤーを持つことは罪ではありません。
  • jgauffinが得たのは、質問がMVCに固有であるということだと思います。 MVCパースペクティブとMVCパースペクティブのみからシステムを表示することに同意する場合、はい、すべてのビジネスロジックは"モデル"ですが、"モデル"は、iv id =を含む複数のクラスとレイヤーを包括できます。 “39dcde7ea6″>

ユーティリティクラス"および"サービスレイヤー" 。別の言い方をすれば、'サービスレイヤーがコントローラーまたはビューの一部であるとは言えないため、最適なのはモデルです。

回答

ビジネスロジックをモデル内に配置するのが最善の方法と思われるかもしれません。コントローラは、リモートWebアプリから呼び出しを受信します。 MVC Webサービスのコントローラーが呼び出しを受け取り、実行をBLのメソッドにリダイレクトします。 これで、ビジネスロジックを「モデル」に含めることができますが、「ビジネスロジック」などの他のフォルダに配置することもできます。したがって、ビジネスロジックがどこに配置されるかについての厳格なルールはありません。

私はMVC3.0上に構築されたWebサービスを使用しており、ビジネスロジックのコンテナはMVC モデル

コメント

  • 同意します。モデルが単に他のビジネスロジッククラスによって実行されるデータ構造である場合、はるかに柔軟なアプリケーションを取得できます。簡単な例として、これはASP.NET 'の属性を使用した検証へのアプローチの大きな失敗だと思います。 Person 'のFirstNameプロパティにRequired属性で注釈を付けると、FirstNameが不要な管理ビューを作成するとどうなりますか?ビジネスロジック層はモデルを消費し、モデルに適切なアクションを決定する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Deep Theme Powered by WordPress