う物だから返されるデータアクセス層の層n tierシステム
-
21-08-2019 - |
質問
している場合、例えば、データベースのテーブルという名(ID、氏名等)をどのようなオブジェクトのデータにアクセス層の事業tier?って思ったこと。
//data access tier
public class DataAccess{
public interface IPerson{
int ID{ get; set; }
string Name{ get; set; }
}
internal class Person : IPerson{
private int id;
private string name;
public int ID{ get{return id; } set{ id=value; } }
public int Name{ get{retutn name; } set{ name=value; }
}
public static IPerson GetPerson(int personId)
{
//get person record from db, populate Person object
return person;
}
}
//business tier
public class Person : IPerson{
private int id;
private string name;
public int ID{ get{return id;} set{id=value;} }
public string Name{ get{return name;} set{name=value;} }
public void Populate(int personId){
IPerson temp = DataAccess.GetPerson(personId);
this.ID = temp.ID;
this.Name = temp.Name;
}
}
でもこのように少し面倒?あまりエレガントな解決方法がこの問題なのか。べきかを返しDataRowからのデータにアクセス層の層ょうか?
解決
あなたはあなたのデータアクセス層(DAL)にクラス定義を繰り返す必要はありません。
あなたは別のアセンブリで「ダムのコンテナ、例えばとしてあなたのビジネスエンティティを作成することができますあなたのPersonクラスは、ちょうどすることができます: -
public class Person
{
int ID { get; set: }
string Name { get; set: }
}
次に、あなたのDALビジネスエンティティ層への参照を与えることができます。お使いのコントローラオブジェクトは、彼らが別のビジネスロジック層である、またはあなたのUI層の中に、そしてちょうど、ビジネスエンティティを作成することができDALを呼び出すことができ、データベースからそれを移入して、コントローラにそれを返すかどうか。
IMAR Spaanjaarsによってを他のヒント
事業層の違いについて知りたいデータ行うデータを特定のクラスを、データ。この削減に結び解放する変更を永続化層は後日な卸再毎.
を解決する特定の問題ることができますが、:
- 作成の基礎データオブジェクト/エンティティデータの層しなくてはならないオフのビジネス層を消費するものになっている。
- または、そういう確認することができまを作成しDTOs(データ転送オブジェクト)に存在する純粋に転送する一つの手段としてのデータからのデータについてはより豊かな実施のビジネスオブジェクトの上位層である。だがこの一環として、リポジトリのパターンの豊富なドメインモデルです。
その他のものが考えていきたいと思いは段にv層では変化などを考えることに頼もしく感じました。階層は物理的、すなわちらを定義する境界プロセス。層は一般的に論理的に、別のプログラムの機能を疎結合す。目指すの層ます。
は、データアクセス層から、あなたのビジネス層を参照することができます。ビジネス層からデータ層のリターンオブジェクトでDAOクラス。
あなたのビジネス層は、直接データアクセスオブジェクトを参照するのではなく、インタフェースを参照します。 (例えば城ウィンザーのような)IoCコンテナを介した依存性の注入は、あなたがこれを達成することができます。
この技術は、インターフェース分離と呼ばれ、ここに記載されている
http://www.martinfowler.com/eaaCatalog/separatedInterface.htmlする
私が見てきたこの技術の最良の説明はビリーMcCaffertyが書いNHibernateのベストプラクティス、この記事で見つけることができます。
http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx の
の記事はNHiberbateに固有の情報の多くは持っているが、それの良い半分は、試験されたばかり固体疎結合するアプリケーションの設計上の情報と簡単にユニットです。
すべての層が上位層に緩く結合されなければならないこのルールとして、DALにBLの参照を追加することは良い考えではありません。 その優れたインターフェースとDALのデータモデルを定義し、BLにビジネスエンティティフォームを作ります。 私の経験として、その優れたビジネスエンティティまたはビジネスプロセス内でDALとアクセスでリポジトリを使用します。