我正在构建一个三层应用程序,例如DAL,BLL,UI层。 DAL公开EF包装器(UnitOfWork和Generic Repository模式)。
BLL组件是一个带有一些基本业务逻辑规则的DAL包装器。 实质上,BLL使用虚拟CRUD和验证方法公开BusinessObjectBase类(T是POCO类),然后使用BusinessTransactionBase来协调多个CRUD操作。
您可以像一种ObjectContext Wrapper一样查看BLL组件: 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?我应该从我的基类构建一个inhertied对象,我不知道任何ctor参数。
2)如何确保BusinessTransactionBase和BusinessObjectBase类之间的IUnitOfWork共享?我强制要这样做,因为我怎么能说,BusinessObjectBase和BusinessTransactionBase紧密相关。
答案 0 :(得分:0)
我认为已经解决了。 我创建了一个带有标准逻辑的密封业务类,例如我的公司要求我。它只是一个带有一些逻辑的IRepository包装器。 然后,我创建了一个可继承的业务事务类,它是一个简单的UnotOfWork模式。
该类使用事件参数公开受保护事件,该事件参数需要从某些UI或类似事件加载哪个businessObject,因此从业务事务类继承可以利用此事件来注入自己的“业务规则”。 BusinessRule是一个简单的接口,其中包含有关“GetDataRequired”和“SavingDataRequired”的方法,每次执行CRUD操作时,我都会在我的基础BusinessObject类中调用它。
这就是全部。 它工作正常。