2011-01-27 45 views
0

我正在更改企業會計應用程序的體系結構。我打算使用IRepositoy <TDataModel>模式,但有一點區別。我將爲來自基礎IRepository <TDataModel>的每個實體創建一個接口。例如,如果我的實體是客戶,產品和訂單,然後我將不得不知識庫<T>和存儲庫每個實體

IClientRepository:IRepository <ClientModel>
IProductRepository:IRepository <產品型號>
IOrderRepository:IRepository <OrderModel>

public interface IRepository<TDataModel, TId> 
{ 
    TDataModel Get(TId Id); 
    IList<TDataModel> List(); 

    TDataModel Add(TDataModel Item); 
    TDataModel Add(TDataModel Item, IContext executingContext); 

    void Update(TDataModel Item); 
    void Update(TDataModel Item, IContext executingContext); 

    bool Delete(TId Id); 
    bool Delete(TId Id, IContext executingContext); 

    IList<TDataModel> Where 
     (System.Linq.Expressions.Expression<Func<TDataModel, bool>> criteria); 
} 


public interface IProductRepository : IRepository<DataModel.Product, int> 
{ 

} 

的原因使用這種方法是我想在DAL中設置一些域模型的屬性,而不是在BLL中 - 例如設置一些實體的CreationDate(順便說一句, ?)

我看了一些入庫樣本,但找不到任何使用這種組合的東西。我想知道有沒有什麼好做的?它是否正確?其他優點和缺點是什麼?

在此先感謝

+0

爲什麼你需要更新的方法?您是使用自定義構建數據訪問層還是依賴其中一個ORM? – 2011-01-27 14:00:59

+0

是的,我使用NHibernate,但在其他項目中我也有更新方法,是不是錯誤? – sos00 2011-01-27 14:37:57

回答

0

我想這取決於你如何看待創建日期。它是否是域的一部分?任何域邏輯是否依賴於這個值?

例如,系統是否需要「代表創建」的能力(在這種情況下創建者和創建日期不會等於當前用戶和當前時間)?如果從備份中恢復數據不保留原始值,會不會破壞?對於創建日期是客戶的時間,服務器日期時間還是數據庫日期時間,這一點很重要嗎?

如果以上所有答案都是NO,那麼 A)創建日期不是域的一部分,所以它可以在外部設置 B)你真的需要它嗎?如果是這樣,那麼我只是猜測基礎設施問題 - 緩存管理,更改通知等。是嗎?