我有我的實體,如我的領域模型中定義的Customer,Order等。數據庫特定的類型是在域模型還是數據訪問層?
現在我想定義一個名爲IRepository的接口來表示我的持久層,我將進一步擁有實現IRepository的SQLRepository,CacheRepository。
現在我想知道是否應該在域模型或數據訪問層中定義IRepository?我猜SQLRepository和CacheRepository需要進入DAL,但IRepository是否也在那裏?
此外,例如我的知識庫從客戶表中返回一個客戶列表,我對如何設計這個有點困惑,似乎最終我在DAL和域模型中重複類型。見下面的例子:
在應用我想要做這樣的事情:
var repository = new SQLRepository();
//Below repository.customers represents customer table
List<Customer> customers = repository.Customers.list();
所以在我的域名:
class Customer
{
public int id;
public string name;
}
在我的DAL:
class SqlRepository:IRepository
{
public CustomerTable Customers;
}
class CustomerTable
{
public List<Customer> list();
}
我想知道是否有更好的方法來設計這些圖層?
* UPDATE
我已經有DAL和在不同的類庫/組件中定義的域。起初我以爲我會有像客戶這樣的POCO實體,它代表數據庫表中的一條記錄,但是在哪裏聲明Customer.Add(客戶)?它是否進入DAL?我不想在DAL中使用業務規則,如果我開始在實體中添加方法,他們會變得複雜,具有持久性邏輯以及其中的業務邏輯。
我的想法也是 - 如果可能的話,將它們自己的組件中的圖層分開。 – mozillanerd
是的,我會分層到不同的組件。這也將使您有機會將圖層分佈在物理層上。 –
我已經有DAL和在不同的類庫/組件中定義的域。起初我以爲我會有POCO實體,如客戶代表在數據庫表中的一個記錄,但隨後在哪裏申報Customer.Add(客戶)?它是否進入DAL?我不想在DAL中使用業務規則,如果我開始在實體中添加方法,他們會變得複雜,具有持久性邏輯以及其中的業務邏輯。 – newbie