Transactions 继承业务逻辑的最佳实践

Transactions 继承业务逻辑的最佳实践,transactions,three-tier,Transactions,Three Tier,我正在构建一个三层应用程序,如DAL、BLL、UI层。 DAL公开EF包装器(UnitOfWork和通用存储库模式) BLL组件是一个具有一些基本业务逻辑规则的DAL包装器。 本质上,BLL公开了一个BusinessObjectBase类(T是POCO类),其中包含虚拟CRUD和验证方法,然后是一个BusinessTransactionBase来协调多个CRUD操作 您可以将BLL组件看作一种ObjectContext包装器: BusinessObject=对象集,每个实体具有业务逻辑。 Bus

我正在构建一个三层应用程序,如DAL、BLL、UI层。 DAL公开EF包装器(UnitOfWork和通用存储库模式)

BLL组件是一个具有一些基本业务逻辑规则的DAL包装器。 本质上,BLL公开了一个BusinessObjectBase类(T是POCO类),其中包含虚拟CRUD和验证方法,然后是一个BusinessTransactionBase来协调多个CRUD操作

您可以将BLL组件看作一种ObjectContext包装器: BusinessObject=对象集,每个实体具有业务逻辑。 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?
        }

    }
公共类BusinessObjectBase,其中T:class
{
//保护我的工作?
公共虚拟空白插入(T项)
{
//我的默认公司逻辑规则。。
如果(本验证(项目))
{
IUnitOfWork.GetRepository().AddEntity();
IUnitOfWork.Save();
}
}
公共虚拟无效编辑(T项)
{
//我的默认公司逻辑规则。。
}
公共虚拟bool验证(T项)
{
//我的默认公司逻辑规则。。
返回true;
}
}
公共类BusinessTransactionBase
{
//保护我的工作?
公共无效正在进行交易()
{
//…通知所有BusinessObjectBase跳过IUniOfWork.Save调用
}
公共无效提交()
{
这个.IUnitOfWork.Save();
}
public BusinessObjectBase GetBusinessObject(),其中T:class
{
//如何通过继承类的反射创建实例
//不知道参数?
}
}
我有两个问题:

1) 如何确保在GetBusinessObject方法上正确构建BusinessObjectBase?我应该从我的基类中构建一个固有的对象,我不知道任何参数

2) 如何确保BusinessTransactionBase和BusinessObjectBase类之间的IUnitOfWork共享?我必须这么做,因为我怎么能说,BusinessObjectBase和BusinessTransactionBase是紧密相关的。

我想已经解决了。 我已经用标准逻辑创建了一个密封的业务类,就像我的公司所要求的那样。这只是一个带有逻辑的假设包装。 然后,我创建了一个可继承的业务事务类,它是一个简单的非时间工作模式

该类公开了一个受保护的事件,其中包含需要从某个UI或类似UI加载的businessObject的事件参数,因此其inherit from business transaction类可以利用该事件来注入自己的“业务规则”。 BusinessRule是一个简单的接口,包含关于“GetDataRequired”和“SavingDataRequired”的方法,每次执行CRUD操作时,我都会在基本BusinessObject类中调用这些方法

就这些。
很好。

有人能帮我吗?