BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Udi Dahan对于业务逻辑重用以及微服务方面的观点

| 作者 Jan Stenberg 关注 34 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2015年7月8日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

今年的DDD Exchange大会在伦敦如期举行,Udi Dahan在大会上的一场演讲中从一种不同的角度对业务逻辑进行了剖析。他表示:近三十年来,重用已经成为了一种口号,它几乎可以套用在系统开发中的每一个环节上。但重用其实是一种砒霜,极少量的使用可以用于治疗,而一旦过量就会致命。

Dahan是SOA与DDD方面的业界权威,他首先描述了重用思想的发展。当面向对象思想开始流行之时,重用的概念在其中扮演了一个重要的角色,但在实际应用中由于对象结构层次的使用没有得到良好的制约,导致出现了大量的紧耦合问题。在那段时间之后的5至10年内,面向组件的设计开始冒头,它着重承诺了可重用组件的地位,但重用还是没能成为拯救我们的灵丹妙药。随后在软件设计中又出现了SOA与微服务技术,它们都着重强调了重用的重要性。但经过了这些年的经验之后,Dahan抛出了这个疑问:如果重用从没有真正地起到作用,又怎能期望它会在当下创造奇迹呢?

将重用视为一种糟糕的主意,这种看法并不鲜见。Dahan在这里引用了Ted Neward的思想,后者在企业计算十大谬误的基础上又额外补充了一条:业务逻辑能够、也应该实现集中化。Dahan以一个简单的规则为例:某种名称必须限制在40个字符之内。那么应当在哪里强制实施这一规则呢?通常来说,我们一般会在UI、业务逻辑以及数据库中实现这一规则,但由于实现规则的地方不止一处,一旦这条规则需要改变,问题就出现了。Dahan曾经看到过这样一种解决方案,即通过元数据生成代码,这意味着只需在一个地方改变这条规则,就能够自动重新生成修改后的代码。但以他的经验来看,这种做法多半不会成功。从根本上说,问题不在于这条规则在多个地方实现,而在于难以找到所有能够改变这一规则的地方。Dahan提出了一种解决方案,他建议使用源代码控制处理这一问题。首先为这一规则创建一个issue,然后将所有用于处理这一规则的源代码进行一次整体提交,并将它与这个issue相关联起来。如此一来,一旦需要改变这一规则,很容易就能够找到实现这一规则的所有代码:

当某条规则改变时,就到源代码控制系统中去找

软件架构并非一种简单的二维问题,不可能通过一个简单的图描述一个完整的架构。Dahan引用了Philippe Kructhen所提出的4+1架构视图模型,Philippe认为将整个架构简化为一个单一的视图是不可能的,必须将架构的不同方面封装在不同的视图中,才能够处理所有的复杂性。在Dahan看来,微服务思想的一个问题在于它试图以同一种视图表现所有环节,开发、逻辑、过程乃至硬件单元都被压缩在一个单一视图之内,他认为这会使服务的约束显得过于沉重。

Dahan认为以下场景是比较适合使用微服务的:当你需要测试新的某个业务用例,需要进行快速开发,并且可以独立地部署该方案的实现时,此时就是使用微服务的良机。但他同时也提到,一旦证实了这一业务用例能够正常运作,对原始的实现进行重写是十分重要的,而且必须事先征求业务人员的同意。

去年晚些时候,Dahan曾对微服务在企业中的应用进行了一次具有批判性的审视

明年的DDD Exchange大会预计于2016年6月10日举办,现已开放注册。

查看英文原文Udi Dahan on Reuse in Business Logic and Microservices

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT