6

メンバーの複雑な計算を行うアプリケーションがあります。各メンバーは、プロフィールにリンクされた複数の米国の州を持つことができます。各州は、メンバーが完了した各コースごとに異なる計算を行っています。ビジネス層とSQL Server

現在、私はDB(SQL Server 2008)で計算を実行していて、履歴を確認して各コースの証明書をダウンロードできるアプリケーション層にデータを送り返しています。

私はビジネスロジック層を持っていますが、そこではあまり発生しません。これは多く質問されていますが、私はこれらの計算をどこで実行すべきだと思いますか:ビジネス層またはデータベースですか?私は前後に行く!

+7

私はいつも計算をデータベースで行います** **あなたの計算で**たくさんのデータ**を中間層に返す必要がある場合は**、計算された「SUM」。そのデータをすべて送信するのはどうしてですか?データベースは、いくつかの値を合計し、単一の結果を返すだけで十分です - **多くの**効率化!だから、たくさんのことをする必要がありますが、少しは戻ってくる必要があるときはいつでも、サーバ上でそれを行います。 –

+2

私は@ marc_sに同意します。SQL Serverは、データを迅速かつ効率的に処理するように設計されています。 –

答えて

6

私は基本的にSQL Serverで何でもするだろうと。

  • は、データの合算計数の多くは、平均化などを行い、単一の値のみを返します。 大量のデータを中間層に転送するだけでは、列を集計するだけでは意味がありません。

  • 多くの行/セットベースの操作を行います。データのコピー、挿入、更新が必要な場合は、そのデータをすべて中間層にドラッグして、すべてサーバーに戻す必要はありません。サーバーからすぐに実行してください。また:T-SQLは、あなたの中間層で何よりも、(周りのデータのシャッフルのような)セットベースの操作に対処する上で非常に高速であることは簡単で

可能性があります。クライアントに大量のデータを送信しないようにしてください(データベースに格納されたファイルをダウンロードしたい場合、または実際にが必要な場合は、アプリ内のオブジェクトにマテリアライズされた200行をどこかに表示または操作させる必要がある場合を除き、/中間層/ on)

よく見落とされる機能の1つは、計算テーブルのデータベーステーブルたとえば、あなたの注文合計と税金と送料の合計を合計して表示するか、姓と名を一緒に表示名に入れることができます。これらの種類のことは、ビジネスロジックレイヤーでのみ処理するべきではありません。データベースのデータを直接操作する場合は、データベーステーブルを調べてSQL Serverのデータを見るときに、 MGMTメーカー...


私はそれがなど広範な論理チェック、文字列解析、パターンマッチングとを必要に応じて中間層/ビジネスロジック層

  • にそれを置くでしょう。 T-SQLは、(それがビジネスロジックの動作のより必要に応じてその

  • のようなあなたに対するデータ、または何かを検証するためにいくつかのデータを取得するには、Webサービスを呼び出すようなものを、必要に応じてそれらのもの

  • で吸いますのではなく、厳密な「原子」のデータベース操作)

しかし、これらは単に「ラフ」のガイドラインです - それは、常に各ケースの設計上の決定だ、と私は厳格な規則を信じていません。あなたの走行距離は、ケースごとに異なる場合がありますので、手元の任意のタスクに最適なアプローチを選択してください。

0

データベース(ストアドプロシージャ)内にビジネスロジックコードを持たないようにします。アプリケーションに直接組み込む方がずっと優れているので、アーキテクチャに適しています。このSQLコードにはビジネスロジックが含まれており、問題はありません。 (しかし、sprocsのデータやメンテナンス関連のコードを持っていることに間違いはありません)。

ビジネスロジックレイヤーがあまり進まず、SQL Serverから呼び出し元にデータを渡すだけの場合は、まったく必要ありません。

+1

ストアドプロシージャは、データベース操作を処理し、ビジネスロジックを「非表示」しない限り、非常に便利です。しかし、多くの操作では、ストアドプロシージャを使用すると非常に便利です。私は世界的に "禁止"していないでしょう –

+1

あなたは正しいです。 – usr

+0

ありがとうございました、 基本的にどのコースに出席したのかのデータを取得したら、登録されている各州のすべてのクレジットと一緒にメンバーに報告します。私はDBがこれらの計算を実行するための正しい場所だと信じています。 純粋なvb.net/c#の男でした。もちろん、彼はそれがすべてBLLで行われるべきであると主張している。それぞれの状況は異なります。 – mick

0

ビジネスロジックレイヤーは重労働ではありません。目的は、主題の言語でエンティティを抽象化することです。したがって、ビジネス・レイヤーを使用して、そのスペースで作業する必要があるレイヤー/アプリケーションに対して、共有された一貫したアプローチを提供できます。

エンジニアは、ビジネスロジックレイヤーがそのサブジェクトスペースで働くすべてのアプリケーションに対して組織全体で使用されることを究極の目標としています。私。サービスなどに包まれています。

これを行う小さなアプリの現実世界では、ビジネスロジックレイヤーは何度か付録のように感じます。どのようなユースケースもビジネスレイヤーに対するテストとして実装する必要があることを覚えておいて、パブリックインターフェイスの外観を考える別の方法を提供します。

ビジネスロジックレイヤーは、それを呼び出すアプリケーションの部分から非表示にする必要があります。

したがって、ビジネスロジックレイヤで適切な表現が与えられている限り、最も効率的な方法(つまりSQL)でデータを計算することは完全に容認されます。

関連する問題