新手求助关于CRUD实体中CRUD操作的分层问题

NOYISUPER 2009-02-25 01:27:20
简单的3层框架引用关系从上到下是UI-BLL-DAL-ENTITY,在C#编译时是从下到上编译的

问题是,现在我做个小项目,将基本的CRUD做了个BLLBASE的基类放在BLL层里,然后由BLLBASE操作在DAL层中的DALBASE中的STAITIC方法,用HIBERNATE操作数据库。我本来的想法是用实体层全部继承BLLBASE方法

------------------------BLLBASE部分代码------------------------------
public abstract class BLLBase
{

public BLLBase() { }

public BLLBase(int entityId):this()
{
DALBase.Load(this, entityId);
}

public virtual void Create()
{
DALBase.Create(this);
}

public virtual void Updata()
{
DALBase.Update(this);
}

public virtual void Delete()
{
DALBase.Delete(this);
}

public virtual void Load(int entityId)
{
DALBase.Load(this, entityId);
}
}
---------------------------------DALBASE部分代码-----------------------
public static void Create(Object entityObject)
{

ITransaction it = session.BeginTransaction();
try
{
session.Save(entityObject);
it.Commit();
}
catch (Exception)
{
it.Rollback();
throw;
}

}
-------------------------------------------------------------------


哪么我就可以应用常用的CRUD操作
例如USER.CREATE()等等,但是做到这里突然发现,这时候层的依赖关系发生了变化,变成了UI-ENTITY-BLL-DAL。按道理这好像是错误的逻辑关系。而且,假如我要在BLLUSER中添加新方法例如QueryAll(USER user){}等,,就会出现依赖项目的循环引用问题。

于是我迷茫了,难道CRUD的所有操作只能写成ENTITY基类放在实体层里。而不应该像我这样按简单3层的按功能分在BLLBASE和DALBASE里?
如果放在ENTITY基类里,那么对数据库的操作不就分成了2块,一块由ENTITY直接操作,1块右DAL层操作,一是感觉代码重复,二是感觉不利于维护。

求教各位大大,到底我在代码分层逻辑上哪错了,并提供相关的成熟分层方式

注:此项目想用NHIBERNATE进行CRUD,但同时想用ADO.NET操作DATAGRIDVIEW等数据查询,所以肯定需要对DALUSER这些类进行QUERY等方法的扩展

感觉自己写的乱七八糟,表述不清除……希望还是有人能看得懂@-@!
...全文
73 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
EveryCase 2009-02-25
  • 打赏
  • 举报
回复
顶~~~~~~~~~~

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧