[欢迎拍砖]系统分层的三个进阶
老毕 2012-05-02 10:34:03 大家都在讨论分层,我也简单地谈一谈自己的认识,欢迎大家拍砖。
-----------------------------------------------------------------------------------------------
以我个人的智识,一个良好的系统分层,其最大的目的在于把系统分解成更小的单位、更单一的模块、更灵巧的组件。合理的分层设计,将会既方便团队开发与协作,也方便测试与集成,在提供可维护性的同时,也使系统更加健壮。OOD领域的S.O.L.I.D五大原则,就是对系统分层、系统建模的最佳诠释。
而现实的情况是,一说到系统分层就言必称UI-BLL-DAL三层,而且其中大多的BLL实现是贫血的,除了CRUD,基本干不了其他什么事。除了一个空的三层架子和累赘的代码,这样的设计没有体现出任何优势。
就个人理解而言,面向领域、面向服务、面向切面和插件式的系统设计与实现方法,是当前企业应用开发的主要方向。这些方法在实际应用系统分层的实践中,可以具体体现为系统分层的三个进阶:
第一个阶层,是做到持久化无关和UI无关。
即一个系统的模型可以脱离具体的数据持久化方式和具体的UI表现方式,换不同的数据库平台甚至使用非数据库方式都可以承载整个系统,使用Web或者Winform的方式,都可以使UI得到正确的表达。
第二个阶层,是实现物理部署的无关。
分布式应用越来越广泛,一个完整的系统,其物理部署可能跨越多个不同的服务器平台。这一点类似于第一个阶层,只是实施难度会因为引入一些分布式技术和面向服务的设计而有所增加,一些困难甚至在真正实施部署前都可能是未知的。
第三个阶层,是实现业务规则的灵活表达。
举个简单的例子,比如说现在的系统要求一个人年龄不能小于16岁,而过一段时间以后,这个条件可能修改为不能小于18岁并且未婚,象这样的数据有效性验证规则,应该能在系统中得到灵活的改变,而不至于从根本上影响整个模型。如果是对模型实质性的改变,那么对模型的重构是必须的,也是必然的。