关于三层架构,不得再说一说

bluedoctor 2011-03-03 11:10:38
今天搜索一个问题,偶然看到论坛中一篇老文,讨论得很激烈:
不显示删除回复显示所有回复显示星级回复显示得分回复 一个关于三层里的数据层的疑惑——SQL语句算不算业务逻辑?[
http://topic.csdn.net/u/20070430/08/da7d50dc-9c7f-43a2-89a7-7a3fda613b69.html

看了之后,不得不再说一说,有很多初学的同学都存在误解,困惑,这里说一下我的总结:

1,SQL语句,只应该放到DAL层,也就是数据访问层
SqlHelper等等对数据进行CRUD的东西,应该算作系统框架层的东西,不是三层架构中的数据访问层,可以算作“数据持久化层
数据库,这个应该叫做“数据存储层
2,业务层,不能有任何SQL语句出现,它是处理领域对象的,或者说是领域模型的加工厂;
3,Model,严格来说不能算作一个层,它是一个横跨UI,BLL,DAL层的东西,或者说是数据容器,BLL通过DAL将数据装进Model,然后将Model送给 UI;
4,UI,这个不用多说了,你懂的。

使用PDF.NET数据开发框架,可以很自然的理解上面的层次结构:
1,在UI层,使用Model对象和框架提供的UI控件;
2,在BLL层,使用OQL来查询Model,并进一步加工;
3,在DAL层,使用SQL-MAP来存储所有的复杂SQL查询,并提供代码工具将它映射为SqlMapDAL层代码。
...全文
1372 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
YHL27 2011-05-16
  • 打赏
  • 举报
回复
so cool
砝码 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jinxing71 的回复:]
我觉得你不需刻意的关注那一层应该具体有什么,你只要能做到隔离关注点,使得你通过业务分析出来的不同的东西能不互相影响。你就刻意任意的分层。只要做到层间耦合度低,层内聚合度高就刻意了。我觉得没有必要刻意的去说。
[/Quote]
对。分层这个东西得根据实际来,刚理论是不行的。
rwm5366745 2011-04-08
  • 打赏
  • 举报
回复
分层 是为了 低耦合 高内聚
  • 打赏
  • 举报
回复
以前也比较纠结Model层到底该划归哪去
后来的看法也慢慢就和楼主一致了
它可以让开发BLL层的不需要了解DAL的具体结构就能从容地处理业务,然后将结果送给UI
当然这中间为了这种方便(其实远不止方便而已),或多或少会有一些代价
kkbac 2011-03-25
  • 打赏
  • 举报
回复
有没有大虾可以提供下比较公认的简单的三层结构代码加分析的么, 这么久了,还是分不清楚这个层是用来做什么的.唉.
bluedoctor 2011-03-25
  • 打赏
  • 举报
回复
再听听大家的意见?
bluedoctor 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 phil999 的回复:]
pdf.net 宣传的真够厉害的,楼主觉得能干过 ef 和 nh?
[/Quote]
我只是给大家分享分享,EF也常用,NHibernate看过别人写的代码,用iBatis做项目那些配置搞得人吐血,另外觉得真正做项目,关键要掌握细节,EF不开源,NH和iBatis虽说开源但是过于复杂,这些东西出了问题如果你不是专家,真的很麻烦,所以有一套自己的框架或者非常轻量级的框架,是非常必要的!
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 phil999 的回复:]

引用 20 楼 sp1234 的回复:

种菜需大粪但也没必要帮助人拉屎


哥,这个是啥含义
[/Quote]

呵呵,我不得不帮人拉屎,才能用一点大粪来种菜。这年头人都懒了,连拉屎都要别人帮忙。
phil999 2011-03-13
  • 打赏
  • 举报
回复
pdf.net 宣传的真够厉害的,楼主觉得能干过 ef 和 nh?
phil999 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sp1234 的回复:]

种菜需大粪但也没必要帮助人拉屎
[/Quote]

哥,这个是啥含义
  • 打赏
  • 举报
回复
有些人恨不得搞个10层,其实许多部分根本没有必要一定去分层。

比如你可以使用Adapter去访问数据库,别人使用ado.net的命令方式直接去访问又有什么不可以的呢?根本没有必要对这些细节也搞什么编程“标准”。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 karascanvas 的回复:]

model那是业务层的吧,一般认为业务层不应该和具体数据源耦合,在里面写sql明显就是不可取的...
[/Quote]

只要关心表现层跟数据库分离就行了,这就是三层了。如果还要去纠结业务层跟数据库是否耦合,那就成了四层了。
ji1sheng2hua3 2011-03-13
  • 打赏
  • 举报
回复
MVC吧 来顶一下贴
bluedoctor 2011-03-10
  • 打赏
  • 举报
回复
PDF.NET框架现在可以免费送源码,详情请看上面说的官方网址。
陶庆 2011-03-09
  • 打赏
  • 举报
回复
说得不错!!
PitTroll 2011-03-08
  • 打赏
  • 举报
回复
好久木有用了,如果数据库很大的话,编译起来太慢。
bluedoctor 2011-03-08
  • 打赏
  • 举报
回复
楼上说的不错,大家都来说说自己 的观点?
alan_219_2008 2011-03-06
  • 打赏
  • 举报
回复
个人理解
Model仅是一些实体对象 一些容器
在BLL层可以利用Model的某些实体将UI内的一些数据处理成DAL层所需要的数据形式
反过来BLL也可以通过DAL操作数据库后利用Model来将数据传给BLL BLL处理成UI所需要显示的数据 再将实体传给UI
当然这里的Model BLL DAL 都是泛指 广义上的
你也可以给各个层再细化分 比如DTO等等
种草德鲁伊 2011-03-06
  • 打赏
  • 举报
回复
model那是业务层的吧,一般认为业务层不应该和具体数据源耦合,在里面写sql明显就是不可取的...
alan_219_2008 2011-03-06
  • 打赏
  • 举报
回复
我个人的理解还是和LZ很相同的
加载更多回复(6)

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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