我正在嘗試將我的域模型編寫爲儘可能持久的域模型。我現在唯一要做的就是標記每個屬性和方法virtual
,因爲NHibernate要求延遲加載。NHibernate ITransaction和純粹域名模型
在我域模型組件我定義了一些庫接口:
public interface IRepository<TEntity> where TEntity : EntityBase {
TEntity Get(int id);
/* ... */
}
public interface IProductRepository : IRepository<Product> { ... }
然後,我有一個數據彙編。這個會引用NHibernate,它知道它的存在。這是實現那些存儲庫接口的程序集:
public abstract class Repository<TEntity> : IRepository<TEntity> {
public TEntity Get(ind id) { ... }
/* ... */
}
public class ProductRepository : Repository<Product>, IProductRepository {
/* ... */
}
等等。
現在我想實現交易功能到我的資料庫。爲此,我會在我的IRepository接口上添加一個BeginTransaction
方法。但是,我無法將其返回類型定義爲NHibernate.ITransaction
,因爲我想保持領域模型持久化無知,並且不會被迫從我的領域模型組件中引用NHibernate的程序集。
你會怎麼做?
你會簡單地實現void BeginTransaction()
,一個void Commit()
,並且在接口上void RollBack()
方法,讓庫執行管理ITransaction
對象內部?
或者你會找到一種方法公開ITransaction
對象讓客戶直接用它來管理事務,而不是使用存儲庫的方法?
謝謝!