我是靠谱客的博主 舒适老师,最近开发中收集的这篇文章主要介绍从混乱到混乱,业务逻辑搬家记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1

 业务逻辑同学

这家伙不仅善变,而且特别喜欢和程序员作对,尤其喜欢制造混乱,让程序员惧怕他。

他最早栖息在像ASP 和 JSP这样的页面当中,整天和那些负责界面展示的HTML,CSS们厮混,在这里除了展示逻辑之外,你还能看访问数据库的代码, 他们坚定不移地以制造混乱为己任,齐心协力把页面搞得一团糟。

0?wx_fmt=png

当程序员想去修改的时候就发现, 这种代码简直就是“意大利面条”, 极难阅读,极难维护。 更不用提什么代码的复用了。

每当程序员抱怨的时候, 业务逻辑说: “怪我咯? 还不是你们自己惹的祸!”

0?wx_fmt=png

2

 第一次搬家

时间久了,大家都受不了, 只好想了新的办法, 分层!   强迫业务逻辑和展示逻辑分家 !

0?wx_fmt=png

业务逻辑被迫搬了家,再也无法和展示层的HTML,CSS一起喝酒吃肉, 每次想聊个天还必须得通过特定接口, 把数据发给展示层才行。 比如业务逻辑层会发个View Object 给展示层,把自己的孤独和思念捎带过去。 再后来展示层完全从服务器端移到了浏览器端,业务逻辑想打个招呼就得跨越网络的千山万水了。

业务逻辑退而求其次, 和Java bean 打得火热,不过很快就发现和Java bean 实在没什么好聊的,太单纯,没有一点深度,除了getter/setter方法之外,啥都没有。

有人把此时的业务逻辑称为Service , 有人称为Manager ,业务逻辑更喜欢这个名字,因为显得更加威严,更像系统的老大。

无论叫什么,其实做的事情都是一样的: 根据隔壁房间或千里之外的展示层传过来的指示, 从数据库读取数据,形成java bean(有时候连java bean 都不需要) , 进行业务逻辑运算,再给展示层发送结果。

0?wx_fmt=png

程序员把这种Java bean 形象地称为贫血模型, 因为它一点业务逻辑都没有, 业务逻辑在Service中放着呢。

这种简单的开发方式受到了广大程序员的欢迎,它概念简单,门槛极低,初学者很快就能掌握。

建个数据库表, 创建一个对应的java 类,使用Hibernate, MyBatis把它映射到数据库表和字段上, 接下来就可以在Service 中随心所欲地操作这些Java bean 实现业务逻辑了,完全不用什么“高深的”面向对象的分析和设计 。

一个项目划分成多个模块, 大家都按照这种模式开发, 再加上一些辅助的开发工具,能够自动化从数据库表生成各种类, 实在是直接而酸爽。

一大批使用贫血模型的应用程序如雨后春笋般地出现,慢慢地变成了趋势,好像用Java做面向对象的Web开发就是这个样子。 尤其是后来维护项目的程序员, 更是觉得天经地义。

(码农翻身老刘注: 按照Martin Flower在《企业应用架构模式》中的定义,这种方式叫做事务脚本,其本质是用面向对象的语言写面向过程的程序)

这种模式对于简单的增删改查一点问题都没有,甚至还有优势 !

业务逻辑这家伙经常在诱惑程序员,来啊来啊,再多给我的Service/Manager加点逻辑。

随着系统越来越复杂, 这家伙得逞了, 大量的业务规则被添加到Service 当中,Service越来越臃肿, 开始变成巨无霸的类, 各种状态、判断、if else 交织在一起, 喜欢混乱的业务逻辑同学又激动起来,  又回到了“面条代码”的“美好”时代。

3

 第二次搬家

程序员们决定再次让业务逻辑搬家, 搬到一个清静的地方去。

有一天,有个叫做Eric Evans的大神提出了一个新方案: 把Service 层和领域层分开。

0?wx_fmt=png

(码农翻身老刘注: 在Eric Evans的领域驱动开发中,最下面是基础设施层,而不仅仅是数据访问, 我这里为了和之前的图保持一致,只把数据访问列了出来)

业务逻辑同学很不爽地发现,自己不但和展示层彻底说byebye ,还被拆分到一个个的领域对象当中去了,这些对象不仅仅是具有getter/setter的java bean , 而且拥有相关的业务逻辑、业务状态、业务规则。  现在各个领域对象要想聊天吹牛,也非得调用相应的业务接口才可以。

原来的Service 层也成功减肥,变得非常轻薄,不再包含业务规则和知识,只是为下层的领域对象协调任务,分配工作,指挥着他们完成业务任务,解决问题。

程序员们被美好的前景激励着, 努力地帮着业务逻辑再次搬家。 喜欢混乱的业务逻辑同学这次要绝望了, 以后的系统都这么搞,自己还有什么活路。

可是没想到这一次搬家难度很高, 尤其是从需求中分析合适的领域对象,实在不是一件轻松的事情,习惯了之前那种用数据库表驱动的开发方式,想转到领域模型驱动的开发方式, 让大家很不适应。

于是业务逻辑同学趁势鼓噪,算了吧,这种方法太难了,你有丰富的开发经验吗?、你有优秀的面向对象设计能力吗?你能把业务领域专家拉进来一起讨论设计吗? 不行吧? 还是退回去吧,贫血模型多好,又简单又熟悉。

这厮还真得逞了,鉴于大部分遗留系统都是贫血模型,大家没有勇气更没有时间去重构,只好将就着继续往混乱的Service舔砖加瓦,希望能熬到系统重写的那一天。

业务逻辑再次搬回到熟悉的地方,再次开始幸福的生活。

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身2016文章精华》或者《码农翻身2017上半年文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


码农翻身

用故事讲述技术

0.jpeg

最后

以上就是舒适老师为你收集整理的从混乱到混乱,业务逻辑搬家记的全部内容,希望文章能够帮你解决从混乱到混乱,业务逻辑搬家记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部