0

MVC3 を C# で使用し、NHibernate を ORM として、StructureMap を IoC コンテナーとして使用しています。

たぶん私の用語はのですが、簡単な例を試してみましょう

ドメイン オブジェクトがあるとします。

class Product
{
    decimal Price;
}

特定のプロモーションを許可するとしましょう。今は 2 つの機能が必要です。

GetAllDiscountedProducts() //すべての割引商品を一覧表示するには IsDiscounted(Product p) //特定の商品が割引可能かどうかを確認します

製品が割引されているかどうかを判断するビジネス ルールは、価格が特定の値を超えている場合です。たとえば、50 ドルを超えるものは割引可能であるとします。

私はデータ アクセスに NHibernate を使用しているため、QueryOver 構文を使用する傾向があるため、GetAllDiscountedProducts は次のようになります。

//GetAllDiscountedProducts()
session.QueryOver<Product>().(p => p.Price > 50.00)

しかし、ビジネス ルールにデータ アクセス固有のクエリを使用したため、IsDiscounted のロジックを複製する必要があります。

bool IsDiscounted(Product p)
{
    return p.Price>50;
}

ビジネスロジックを一元化する方法はありますか?

4

2 に答える 2

0

この投稿をご覧ください

http://nhibernate.info/blog/2009/09/07/part-8-daos-repositories-or-query-objects.html

ビジネス機能を実行するためにマッピングの上にレイヤーを追加する方法を説明します。

ビジネスが気が変わるたびにドメイン オブジェクトを変更しないように、割引のしきい値を渡したいと思うでしょう。

于 2013-07-17T15:21:20.413 に答える
0

これは、ドメイン層が絵に入ってきたものです。Nhibernate Layer と Controller Level の間にある Product.Domain プロジェクトが必要です。Product.Domain には、メソッドを持つ ProductBLL クラスが必要です。

bool IsDiscounted(Product p) 

{

session.QueryOver<Product>().(p => p.Price > 50.00) 


}

このメソッドは、割引製品を入手するためにアプリケーション全体で使用する必要があります。

すべての割引商品を返す別の方法を使用できます。

GetDiscountedProducts()
{

session.QueryOver<Product>().(p => p.Price > 50.00) 

}

ドメイン レイヤーはすべてのドメイン ロジックを一元化するために存在することを忘れないでください。UI レイヤーまたはデータ レイヤーにドメイン ロジックを配置するべきではありません。

ドメインは、システムの真のポイントであるロジックです。ドメイン ロジックの変更は、ドメイン レイヤーの 1 か所でのみ行う必要があります。

ドメインの動作を個別のサブルーチンに配置してドメイン層を開始し、システムがより複雑になるにつれて、それらを個別のクラスに分割します。複雑さが増すにつれて、クラスを個別の名前空間に分割し、依存性注入の使用を開始します。

最初は、ユーザー アクションごとに 1 つのルーチンがあります。次に、さらにクラスとオブジェクトを取り込みます。1 つのルーチンがユーザー アクションのすべてのロジックを持っているのではなく、各オブジェクトがそれに関連するロジックの一部を取ります。

つまり、ドメイン層の開発は進化的なプロセスになります。

于 2013-07-17T05:49:23.587 に答える