分层思想之我见

    软件设计中的“分层思想”是最常见的也是目前很多小公司最常用的设计思想,被被为“分层架构”。NN多年以来,绝大多数企业中的绝大多数项目都在使用这种架构;这导致了绝大多数架构师的脑海中只有分层架构,只要一提到架构,就是分层,只要一个新的项目或与旧项目类似的项目,就是分层;然而,分层真的这么好用吗?真的这么节省人力成本吗?真的这么节省时间成本吗?真的这么节省金钱成本吗?…………


    首先,我们思考一下,为什么“分层思想”很容易被接受?为什么“分层思想”很容易被小公司用于项目中?个人认为存在以下几点原因:
1、设计与代码不同步:设计软件的人和具体实现的人不同,或往往由于在实现时遇到了困难,迫于时间等原因,不深入思考,就急于完成代码,从而“代码更改了设计的初衷”,分层变得越来越不清晰了,分层也越来越不明确了,但软件前期貌似没有出问题,既然没有出问题,领导也不会过问,除非遇到一个coder恨之入骨的十分负责任的架构师(研发经理或产品经理)。
2、不合格的软件设计人员:软件设计是一门十分艺术化的工作,是一门十分现实化的工作,是一门上不达管理下不达实现细节的工作,是一门叫天天不应叫地地不灵的工作;再加之管理者对软件设计思想不甚了解,认为只要能写文档,并且画几幅所谓的“软件设计图”或“架构设计图”或使用了现成的所谓的“软件设计文档模板”,然后对着文档夸夸奇谈博得众人哑口无言的人就是“合格的软件设计人员”。熟不知,这只是照猫画虎,这只是画虎不成反类犬,这只是东施效颦。同时还有自以为是的领导打圆场说:满足于我们现在的需要就够了,你的技术已经非常牛B了………………等等;熟不知,这只是稳定人心的手段,这只是为了刷存在感。
3、以权压人:不合格的软件设计人员“设计”的必然是不合格的漏洞百出的东西,那么很多coder都能找到其中的漏洞,有些人为了面子不会当面说出来,有些人则会当面指出“设计”的问题,当设计人员找不到说服的理由时,就会说:就这样设计吧,出了问题我负责。熟不知,这样的话是最不负责任的;试问出了问题你如何负责?
4、经验主义:很多软件“设计”人员认为跟着别人做了一两个小项目,就把做过的小项目中的思想照搬照抄到工作中遇到的任何小项目中去,虽然也能解决一部分问题,但也会引入更多的问题,同时也会隐藏更多的问题在里面,这就是经验主义害死人儿呀
5、分层的滥用:分层并非放之四海而皆准的,也并非放之应用系统而皆准的思想。但有些软件“设计”人员只会分层,也只知道分层,其他的他不会,就认为只要是业务系统,只要是应用系统,都应该用分层,并且还侃侃而谈,理由种种,孰不知,这都是为了自己的无知而找的借口。
6、分层的曲解:分层并不是简单的像画楼层图一样画出来就是分层,也不是我把某个(些)功能画在某一层他们就属于某一层,这种画法仅仅是个人的意愿,真实情况是这样的吗?没有细致考虑,因为他们有充足的理由:这是分析阶段,不需要考虑细支末节。听起来很正确“设计阶段不需要考虑具体实现”,这句话害了很多人, 这样的人也害了很多企业,跟着这样的人去做事势必无出路,只能等待时间的宣判
7、项目组内不平等:这和第3点是遥相呼应的,因为不平等就出现了以权压人。项目组内一言堂,这是以权压人的具体表现的一个点而已。最重要的是由于企业文化影响的,因为企业中不乏有军阀作风的领导存在,上行下效,广而为之。
8、其也原因不一一 细谈了,因为篇幅有限。


    接下来,我们简单分析一下分层思想:


    分层思想中的层次是水平方向的分层,每层扮演应用程序中特定的角色。分层意味着可以无限多层,但分层常常限制于3-5层。有太多层的设计会很复杂,当然也有例外,如:ISO的七层模型。我们是软件设计者,同时也是软件维护者,我们需要维护我们划分的每一个层次。分层通常分为:通讯层、数据访问层、业务逻辑层、界面层;每层负责不同的功能。并且每层不需要知道其他层的具体实现,比如业务逻辑层无需知道数据访问层是如何查询数据库的,相反,业务层在调用数据层的特定方法时,只需关注需要部分数据还是全部数据。这就是各司其职。


     分层架构需要解决众多依赖问题;因为层与层之间存在着依赖关系,软件系统中依赖无处不在;既然有了依赖,必然就会出现谁依赖谁,那么这个“谁”与另一个“谁”如何区分呢?就是要把这个“谁”与另一个“谁”定义清楚,并且要把他们分隔开来,达到真正意义上的你和他的概念。但是每个人都分成长(排除不喜欢成长的人),你与他时间都在变化着,那么怎么变化呢?是外部的还是内部的?显然这种变化只能是内部的变化,外部尽量不要变化,这样接口才具有稳定性。

猜你喜欢

转载自blog.csdn.net/lianshaohua/article/details/50767571