日期:2014-05-18  浏览次数:20819 次

[欢迎拍砖]系统分层的三个进阶
大家都在讨论分层,我也简单地谈一谈自己的认识,欢迎大家拍砖。
-----------------------------------------------------------

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

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

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

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

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

第三个阶层,是实现业务规则的灵活表达。
举个简单的例子,比如说现在的系统要求一个人年龄不能小于16岁,而过一段时间以后,这个条件可能修改为不能小于18岁并且未婚,象这样的数据有效性验证规则,应该能在系统中得到灵活的改变,而不至于从根本上影响整个模型。如果是对模型实质性的改变,那么对模型的重构是必须的,也是必然的。

------解决方案--------------------
第二阶段没机会尝试下~~
------解决方案--------------------
业务层表达一直是一种追求
------解决方案--------------------
不太懂,曾经试着写过MVC
------解决方案--------------------
不错,支持一下!
------解决方案--------------------
很不错的帖子 0.0
------解决方案--------------------
不错,支持一下!
------解决方案--------------------
有些小的业务逻辑限制,需要在ui层立即作出响应
如果通过严格的mvc,由于反应慢,用户体验可能会差了
------解决方案--------------------
探讨

有些小的业务逻辑限制,需要在ui层立即作出响应
如果通过严格的mvc,由于反应慢,用户体验可能会差了

------解决方案--------------------
可否说的详细点,看不懂
------解决方案--------------------
这个帖子到是点到一个非常重要的问题

那就是现在大部分的人的model都不是从业务出发的,大部分人都是从数据库表出发的。而且大部分人的model都是从一而终的

实际上就我个人而言,各个层都有model。有BO,有DTO,有ViewModel ,虽然老p同志说不要去掉书袋,别搞啥划分。但是对于个人而言,也并没有去强行划分他们,只是说因为业务逻辑需要,我们会经常性的去组合各种数据结构(其实正常来说现在的实体也不怎么应该叫对象,大部分情况他都只是一些数据结构的封装)出去,所以对于model我个人那是绝对不“从一而终”的,业务需要什么就组合成什么,这和数据库无关,只和业务有关。
------解决方案--------------------
非常到位,点出了分层应用的中心
------解决方案--------------------
说起来容易,做起来难 其实软件的结构划分本质上就是要高内聚 低耦合
------解决方案--------------------
做软件产品必须分层,否则后期会很麻烦,但是做项目有时候受制于很多因素,往往很难作好
------解决方案--------------------
写的不错,看来像是用心了
------解决方案--------------------
楼主这个认识 不错 顶个
------解决方案--------------------

不过做到却很困难,当然也不可以一概而论。
------解决方案--------------------
不错,支持下 d
------解决方案--------------------
说到底,针对接口编程,隔离变化点
根据具体情况,没有公式可以套用
------解决方案--------------------
我想分层的目的是在宏观上分离关注点,有了分层,就可以把注意力集中在UI表现上或者业务表达上。和持久化无关,这个是必要的,但是那不是分层的结果。为什么?在我看来,持久化是不应该独立为一层的,他应处于业务逻辑层,是业务层的技术设施,因而,持久化无关是层内结构导致的,而不是分层结构导致的。业务规则的灵活表达依然是业务层内部的事情。

物理部署无关,这个不了解。