Webアプリケーションのアーキテクテクタクのあるサービスレイヤーvsビジネスレイヤー?

StackOverflow https://stackoverflow.com/questions/4108824

質問

これはばかげているように聞こえるかもしれませんが、サービスレイヤーの必要性とビジネスレイヤーとの違いを理解するのは難しいと感じています。

そのため、ASP.NET MVC 2を使用しており、データベースですべてのクエリを行うデータアクセスレイヤーがあり、ビジネスロジックと検証を行う必要があるビジネスレイヤーがあります。最後に、基本的にすべてのビューを持っているプレゼンテーションレイヤーがあります。さらに、ライブラリの一部として、さまざまなフォルダーにいくつかのヘルパー、DTO、およびViewModelクラスがあります。しかし、私はアーキテクチャについて読もうとしましたが、サービスレイヤーはアーキテクチャの重要な部分であるようです。

私が理解しているのは、サービスレイヤーがすべての機能を呼び出すものであるということです。しかし、アプリケーションでサービスレイヤーの必要性を実際に見ることができませんか?または、それはすでにそこにあるかもしれませんし、私はそれを見ることができません...誰かがサービスレイヤーがどのように重要であるかを例で説明できますか?私が読んだものからかなり似ているように見えるので、それはビジネス層とどう違うのですか?最初に必要な場合は?私たちがやろうとしていることは、可能な限り最善の方法でアプリケーションを建築することです。あなたの考えや経験は何ですか?

役に立ちましたか?

解決

それはすべて、アプリを自己含むピースに切り離すことであり、それぞれが1つのジョブを非常にうまく行うという要件によって定義されています。

これにより、各コンポーネントに特殊なデザインパターンとベストプラクティスを適用できます。

たとえば、ビジネスレイヤーの仕事は、ビジネスロジックを実装することです。フルストップ。プレゼンテーションレイヤーによって消費されるように設計されたAPIを公開することは、その「懸念」ではありません。

間のGOのこの役割は、サービスレイヤーによって最もよく実行されます。この特殊なレイヤーを考慮すると、個々のコンポーネントにはるかに特殊なパターンを適用できます。

このように物事を設計する必要はありませんが、コミュニティの蓄積された経験は、コーディングを開始する前であっても、各コンポーネントが何をするかを正確に知っているため、開発と保守がはるかに簡単なアプリケーションになることを示していますアプリ。

各レイヤーは1つのジョブを本当にうまく行う必要があります。サービスレイヤーが実行することの間のGOの役割は、そのような明確に定義されたジョブの1つであり、それがその存在の理由です。それは、ホイールを再発明するのではなく、何度も何度も設計された複雑さの単位です毎回、この役割を属していないビジネスロジックでこの役割をマングルする。サービスレイヤーをマッピングコンポーネントと考えてください。これはビジネスロジックの外部であり、クラスやコントローラーにも属していません。

また、ビジネスロジックから因数分解された結果、「ビジネス」が消費する他のアプリケーションやサービスで使いやすいビジネスオブジェクトが得られます。

ASP.NET MVCは、アプリを専門コンポーネントとして書き込むことができるプラットフォームではないにしても、何もありません。

コンポーネントを専門とする方法を理解するこの結果、プログラムは、スープとスパゲッティの原始的なボウルから、異なる奇妙なものに進化しています。まだ単純な構造を使用している間、彼らが対処できる複雑さは増加しています。進化は進んでいます。人生が何かをするべきものであるなら、これは良くなければならないので、ボールを転がしてください。

他のヒント

あなたは用語を見つけるかもしれません 建築宇宙飛行士 面白い。

重要なのは、人々がバンディなこれらの「レイヤー」のすべてに巻き込まれないでください。アプリケーションの別のレイヤーがあるたびに、目的が必要です。

たとえば、一部の人々は、データアクセスとビジネスロジックレイヤーの概念を1つに正常に組み合わせます。すべてのソリューションには正しくありませんが、多くのソリューションに完全に機能します。一部の人々はプレゼンテーションとビジネスを組み合わせることさえあります...これは多くのサークルで大きなノーですが、繰り返しますが、問題のニーズに最適かもしれません。

基本的に、あなたが解決している問題は、アプリケーションの構造を決定するはずです。他のアプリケーションがあなたのものと統合する必要がある場合、サービスレイヤーを追加する必要がある場合があります。これは、他の人がデータを投稿できるシンプルなWebフォームの形をとるか、Webサービスでさらに完全になる可能性があります。複数のプレゼンテーションのために、サービスレイヤーがプライマリになりたい状況もあるかもしれません。

あなたはあなたが望むだけ複雑になることができますが、良い経験則は、合併症が必要になるまでそれをシンプルに保つことです。

一部の設計では、サービスレイヤーはプレゼンテーションレイヤーでは使用されません。

サービスレイヤーは、アプリケーションでビジネスおよびデータアクセスレイヤーを使用する他のアプリケーションによって呼び出されます。

ある意味では、サービスレイヤーは、プレゼンテーションレイヤーとは別のフロントエンドです。

を参照してください 建築図 ここ。ユーザーは、プレゼンテーションレイヤーを介してアプリケーションにアクセスします。外部システムは、サービスレイヤーを介してアプリケーションにアクセスします。プレゼンテーションレイヤーとサービスレイヤーは、ビジネスレイヤーのアプリケーションファサードと話し合います。

他の「外部システム」が何であるかの例として、WebサービスとWCFサービスはサービスレイヤーを呼び出します。他のWebアプリケーションの一部は、このアプリケーションのサービスレイヤーをWebサービスコールで呼び出すことができます。これは、両方のアプリが同じビジネスロジックを適用していること、およびビジネスロジックに加えられた変更が両方のアプリに反映されることを保証する1つの方法です。

クリス・ライブリーが指摘しているように、レイヤーの作成に夢中になるべきではありません。アプリケーションで役立つレイヤーのみを作成することをお勧めします。私の経験では、サービスレイヤーの必要性は頻繁ではありませんが、ビジネスレイヤーの必要性は非常に頻繁です。

サービスレイヤーは通常、クライアントにサポートする必要がある離散操作の観点から構築されます。

たとえば、サービスレイヤーはアカウントの作成を公開する場合があります。一方、ビジネス層は、アカウントの作成に必要なパラメーターの検証、持続するデータオブジェクトの構築などで構成されている場合があります。

多くの場合、サービスレイヤーは手続きまたはトランザクションのスクリプトスタイルコードを使用して、ビジネスおよび/またはロジックレイヤーを調整します。

これを知って、あなたはそれを認識するかもしれません あなたの ビジネスレイヤー 本当にそうです サービスレイヤーも同様です。ある時点で、あなたがこの質問をそのようなポイントの1つであると尋ねているポイント、区別はほとんど意味です。

私の観点からは、サービスレイヤーを使用すると、ビジネスレイヤーからプレゼンテーションレイヤーを分離できます。ビジネスとデータアクセスレイヤーがデータの持続方法から分離するのと同じように。

あなたのビジネス層の中には、あなたの「ビジネス」に極めて重要なものを置くでしょう。考慮された(そしておそらく熟考されていない例)は、それが製品の価格を割引すると言う場所であることです。

サービスレイヤーを使用すると、ビジネスからインターフェイスをさらに分離できます。または、ビジネスの変化するシナリオに応じて、他のビジネスレイヤーを交換することもできます。

ただし、すべてのアプリケーションに必要なわけではありません(多くの変数がその決定に陥ります)、あまりにも多くのアーキテクチャがあなたのチームが必要としない複雑さをもたらす可能性があります。

ランディスタッフォードが「eaa of eaa」の本のサービスレイヤーについて言っていることを見てくださいhttp://martinfowler.com/eaacatalog/servicelayer.html

サービスレイヤーは、クライアントレイヤーをインターフェースするという観点から、アプリケーションの境界[コックバーンプロップ]と利用可能な操作のセットを定義します。 アプリケーションのビジネスロジックをカプセル化します、その運用の実装におけるトランザクションとクーラでの応答を制御します。

単純。ビジネスロジックをクライアントに公開するには、サービスレイヤーを使用します。自問してみてください:

ビジネスロジックを変更するとき、サービスレイヤーは変更する必要がありますか?答えが「常にではない」場合、サービスレイヤーが必要です。

このスレッドは古いことを知っていますが、サービスレイヤーで行った便利なことの1つは、トランザクションを処理することです(ビジネスレイヤーは、ロールバック、操作の注文などを処理する方法を知る必要はありません)。

私がやったもう1つのことは、ドメインエンティティとDTO間を翻訳するために使用することです。ビジネスレイヤーはドメインモデルを扱いますが、データをDTOの形でプレゼンテーションレイヤーに渡しました(場合によっては、さまざまな理由でドメインモデル全体をプレゼンテーションレイヤーに公開することは実用的ではありませんでした)、したがって、サービスレイヤーはこのマッピングを処理します。

最終的に、私はビジネス層をより細かい粒子と見なしますが、サービスレイヤーはBLLで複数の操作を呼び出し、1つのサービスコール内で呼び出しを注文できるという点でより粗くなります。

はい、また、サービスレイヤーは、役割ベースとユーザーベースの両方の認証に適した場所であることにも注意します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top