我构建了三层应用程序,例如DAL,BLL,UI图层。 DAL公开一个EF包装(UnitOfWork和Generic Repository模式)。继承业务逻辑的最佳实践
BLL组件是一个包含一些基本业务逻辑规则的DAL包装器。 本质上,BLL使用虚拟CRUD和验证方法公开BusinessObjectBase类(T是POCO类),然后使用BusinessTransactionBase来协调多个CRUD操作。
您可以看看BLL组件,就像一种ObjectContext包装器: BusinessObject = ObjectSet具有每个实体的业务逻辑。 BusinessTransaction = ObjectContext与一些其他最小逻辑
此外,我的组件的主要目标是为不同项目提供一组基本逻辑。今天,我可以用我的组件,以建设约MusicStore,明天我可以建立有关文档管理应用的应用,但始终我会想用我的基本组件(BLL)
简单的片断:
public class BusinessObjectBase<T> where T : class
{
// protected IUnitOfWork ?
public virtual void Insert(T item)
{
// my default company logic rule..
if(this.Validate(item))
{
IUnitOfWork.GetRepository<T>().AddEntity<T>();
IUnitOfWork.Save();
}
}
public virtual void Edit(T item)
{
// my default company logic rule..
}
public virtual bool Validate(T item)
{
// my default company logic rule..
return true;
}
}
public class BusinessTransactionBase
{
// protected IUnitOfWork ?
public void BeingTransaction()
{
// ... Notify at all BusinessObjectBase to skip IUniOfWork.Save call
}
public void Commit()
{
this.IUnitOfWork.Save();
}
public BusinessObjectBase<T> GetBusinessObject<T>() where T : class
{
// How can I create an instance via reflection of an inherited class
// without to know ctor parameters?
}
}
那么,我有两个问题:
1)我怎样才能保证在GetBusinessObject方法上正确构建BusinessObjectBase?我应该从我的基类构建一个隐藏的对象,并且我不知道任何ctor参数。
2)如何确保BusinessTransactionBase和BusinessObjectBase类之间的IUnitOfWork共享?我强制要这么做,因为我怎么能说,BusinessObjectBase和BusinessTransactionBase紧密相关。
有没有人可以帮助我? – bit 2013-04-24 09:08:35