[欢迎拍砖]系统分层的三个进阶

老毕 2012-05-02 10:34:03
加精
大家都在讨论分层,我也简单地谈一谈自己的认识,欢迎大家拍砖。
-----------------------------------------------------------------------------------------------

我个人的智识,一个良好的系统分层,其最大的目的在于把系统分解成更小的单位、更单一的模块、更灵巧的组件。合理的分层设计,将会既方便团队开发与协作,也方便测试与集成,在提供可维护性的同时,也使系统更加健壮。OOD领域的S.O.L.I.D五大原则,就是对系统分层、系统建模的最佳诠释。

而现实的情况是,一说到系统分层就言必称UI-BLL-DAL三层,而且其中大多的BLL实现是贫血的,除了CRUD,基本干不了其他什么事。除了一个空的三层架子和累赘的代码,这样的设计没有体现出任何优势。

个人理解而言,面向领域、面向服务、面向切面和插件式的系统设计与实现方法,是当前企业应用开发的主要方向。这些方法在实际应用系统分层的实践中,可以具体体现为系统分层的三个进阶:

第一个阶层,是做到持久化无关和UI无关。
即一个系统的模型可以脱离具体的数据持久化方式和具体的UI表现方式,换不同的数据库平台甚至使用非数据库方式都可以承载整个系统,使用Web或者Winform的方式,都可以使UI得到正确的表达。

第二个阶层,是实现物理部署的无关。
分布式应用越来越广泛,一个完整的系统,其物理部署可能跨越多个不同的服务器平台。这一点类似于第一个阶层,只是实施难度会因为引入一些分布式技术和面向服务的设计而有所增加,一些困难甚至在真正实施部署前都可能是未知的。

第三个阶层,是实现业务规则的灵活表达。
举个简单的例子,比如说现在的系统要求一个人年龄不能小于16岁,而过一段时间以后,这个条件可能修改为不能小于18岁并且未婚,象这样的数据有效性验证规则,应该能在系统中得到灵活的改变,而不至于从根本上影响整个模型。如果是对模型实质性的改变,那么对模型的重构是必须的,也是必然的。
...全文
2596 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
随风飘扬的叶 2012-05-07
  • 打赏
  • 举报
回复
楼主给个例子!
zkyEric 2012-05-06
  • 打赏
  • 举报
回复
这个对本人启发很大
teaon/off 2012-05-05
  • 打赏
  • 举报
回复
嗯,写的是不错。
theillusion 2012-05-05
  • 打赏
  • 举报
回复
我想分层的目的是在宏观上分离关注点,有了分层,就可以把注意力集中在UI表现上或者业务表达上。和持久化无关,这个是必要的,但是那不是分层的结果。为什么?在我看来,持久化是不应该独立为一层的,他应处于业务逻辑层,是业务层的技术设施,因而,持久化无关是层内结构导致的,而不是分层结构导致的。业务规则的灵活表达依然是业务层内部的事情。

物理部署无关,这个不了解。
muxingrenlgm 2012-05-05
  • 打赏
  • 举报
回复
能否给个实例,完整的源码看看更容易懂,楼主给一个哈
zhujiawei7 2012-05-05
  • 打赏
  • 举报
回复
第2层没接触,不太懂
nonocast 2012-05-05
  • 打赏
  • 举报
回复
说到底,针对接口编程,隔离变化点
根据具体情况,没有公式可以套用
No4000 2012-05-04
  • 打赏
  • 举报
回复
逐步渐进
jedochn2 2012-05-04
  • 打赏
  • 举报
回复
拿3分走人,没看懂
sunxitao88 2012-05-04
  • 打赏
  • 举报
回复
非常到位,点出了分层应用的中心
wodechenghu 2012-05-04
  • 打赏
  • 举报
回复
不错,支持下 d
jacie0617 2012-05-04
  • 打赏
  • 举报
回复

不过做到却很困难,当然也不可以一概而论。
cnwin 2012-05-04
  • 打赏
  • 举报
回复
嗯,写的是不错。
  • 打赏
  • 举报
回复
楼主这个认识 不错 顶个
EagleZhangJB 2012-05-04
  • 打赏
  • 举报
回复
写的不错,看来像是用心了
亮______亮 2012-05-04
  • 打赏
  • 举报
回复
学习下了。。。
一竹 2012-05-04
  • 打赏
  • 举报
回复
做软件产品必须分层,否则后期会很麻烦,但是做项目有时候受制于很多因素,往往很难作好
Rechard850327 2012-05-04
  • 打赏
  • 举报
回复
感谢楼主分享学习下
Rechard850327 2012-05-04
  • 打赏
  • 举报
回复
多谢分享
hangang7403 2012-05-04
  • 打赏
  • 举报
回复
说起来容易,做起来难 其实软件的结构划分本质上就是要高内聚 低耦合
加载更多回复(24)

110,536

社区成员

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

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

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