问题描述
简单的3层框架引用关系从上到下是UI-BLL-DAL-ENTITY,在C#编译时是从下到上编译的问题是,现在我做个小项目,将基本的CRUD做了个BLLBASE的基类放在BLL层里,然后由BLLBASE操作在DAL层中的DALBASE中的STAITIC方法,用HIBERNATE操作数据库。我本来的想法是用实体层全部继承BLLBASE方法------------------------BLLBASE部分代码------------------------------publicabstractclassBLLBase{publicBLLBase(){}publicBLLBase(intentityId):this(){DALBase.Load(this,entityId);}publicvirtualvoidCreate(){DALBase.Create(this);}publicvirtualvoidUpdata(){DALBase.Update(this);}publicvirtualvoidDelete(){DALBase.Delete(this);}publicvirtualvoidLoad(intentityId){DALBase.Load(this,entityId);}}---------------------------------DALBASE部分代码-----------------------publicstaticvoidCreate(ObjectentityObject){ITransactionit=session.BeginTransaction();try{session.Save(entityObject);it.Commit();}catch(Exception){it.Rollback();throw;}}-------------------------------------------------------------------哪么我就可以应用常用的CRUD操作例如USER.CREATE()等等,但是做到这里突然发现,这时候层的依赖关系发生了变化,变成了UI-ENTITY-BLL-DAL。按道理这好像是错误的逻辑关系。而且,假如我要在BLLUSER中添加新方法例如QueryAll(USERuser){}等,,就会出现依赖项目的循环引用问题。于是我迷茫了,难道CRUD的所有操作只能写成ENTITY基类放在实体层里。而不应该像我这样按简单3层的按功能分在BLLBASE和DALBASE里?如果放在ENTITY基类里,那么对数据库的操作不就分成了2块,一块由ENTITY直接操作,1块右DAL层操作,一是感觉代码重复,二是感觉不利于维护。求教各位大大,到底我在代码分层逻辑上哪错了,并提供相关的成熟分层方式注:此项目想用NHIBERNATE进行CRUD,但同时想用ADO.NET操作DATAGRIDVIEW等数据查询,所以肯定需要对DALUSER这些类进行QUERY等方法的扩展感觉自己写的乱七八糟,表述不清除……希望还是有人能看得懂@-@!
解决方案
解决方案二:
顶~~~~~~~~~~