2009-08-10 4 views
5

正しい用語を使用しているかどうかは不明ですが、3層システムの設定方法については少し混乱しています。データアクセスレイヤーとビジネスオブジェクト

私のDBにはユーザーのテーブルがあります。

私のDALには、DBに挿入されたprocsを呼び出して更新、削除するUserDBクラスがあります。 また、UserDBにUserDetailsクラスを使用して、オブジェクトを返して渡します。

これで、ビジネスロジックレイヤーでこれをどのように使用するかわかりません。ユーザーに別のBLLオブジェクトクラスが必要ですか?もしそうなら、これは重複しないでしょうか? BLL全体でUserDetailsクラスを使用するだけですか?

答えて

3

「ドメイン駆動設計」というコンセプトを見つけてください。データベースへのアダプタとしてだけでなく、ファクトリとして、リポジトリパターン(UserDBクラスなど)を使用することが最大のものです。ビジネスオブジェクトまたはドメインオブジェクトは、次にビジネスロジックを組み込み、他のビジネスオブジェクトとのやりとりを処理できます。

どのような技術を使用していますか? ActiveRecordのようなものはおそらくあなたの多くを助けることができます。

2

通常、BLLにビジネスルールを適用します。たとえば、通常のコールセンターの従業員に新しいサービスを10%割引で提供し、マネージャは20%割引を提供することができます。

DAL: 

namespace DAL.Repository 
{ 
    public class UsersRepository 
    { 
     public static IList GetUser(string UserId) 
     { 
      using(MyDBEntities context=new MyDBEntities()) 
      { 
       // it calls SP in DB thru EF to fetch data 
       //here you can also context.user to fetch data instead of SP 
       return context.GetUser(UserId).ToList(); 

      } 
     } 
    } 
} 
BLL 

namespace BLL 
{ 
    public class User 
    { 
     public static IList GetUser(string UserId) 
     { 
      return DAL.Repository.UserRepository.GetUser(UserId); 
     } 
    } 
} 
PL 

    ddlUser.DataTextField = "UserName"; 
    ddlUser.DataValueField = "UserId"; 
    ddlUser.DataSource= BLL.User.GetUser(string.Empty); 
    ddlUser.DataBind() 

注:デザインを以下

// Pseodocode 
double Discount 
{ 
    set 
    { 
     if (value > 10% AND Employee Is Not Manager) then throw Exception 
     if (value > 20%) then throw Exception 
     discount = value; 
    } 
} 
あなたが使用することができます
0

:ビジネスエンティティにDBのエンティティを変換するPLにBLからデータを送信中であるあなたは、次のようなものだあなたBLLのビジネスルールを持っていますあなたがPLでthuデータをループしたい場合に必要です。

関連する問題