kenttanl / kenttanl.github.io

个人博客,http://kentt.top/
https://kenttanl.github.io/
MIT License
0 stars 0 forks source link

总结:系统设计与开发中值得关注的条目 #7

Open kenttanl opened 3 years ago

kenttanl commented 3 years ago

记录自己在系统设计与开发中那些踩过的坑或者觉得重要的条目

1. 统一语言:一个团队,一种语言

  1. 核心模型:精炼系统中最有价值的部分
  2. 边界与划分:服务的边界以及横向划分与纵向划分
  3. 结构与层次:保证清晰的、有序的结构与层次关系
  4. 转换层:正确处理与外部系统的关系
  5. 弹性:容错与自动修复能力
  6. 保持简单:让开发更简单、让运维更简单、让使用更简单
  7. 产品思维:避免因为程序员思维让用户感到困扰
kenttanl commented 3 years ago

1. 统一语言:一个团队,一种语言

在智能手机诞生的初期,每个手机厂商的数据线大多是不一致的。当我尝试向其他同学借一跟安卓数据线的时候,通常会有这样一些对话:“你是什么样子的接口?”“华为的数据线应该可以用吧?“”你试试看这个行不行吧?“ 等等形如此类。大多时候,我们总是需要反复的确认才能得到最终一致的认知。

image

而如果我使用的是苹果手机,那么我就可以问他:”你有苹果手机的数据线吗?“,他可以很准确的告诉我有或者没有,因为苹果手机的数据线总是一致的,我们很早便有了非常一致的认知。

image

回到系统设计中,当我们在开始一个系统设计时,我们需要与需求提起方或者领域专家(后面统称甲方)来确定需求,并根据需求开始系统的设计与开发工作。此时设计到两个方面的沟通工作:一方面是与甲方沟通,以确定系统中所需要的模型以及业务流程等,另外一方面是与技术团队沟通,以从技术角度来设计程序实现。

这个过程会涉及到大量的沟通,所以如果我们在系统中引入了数据线这个模型,而甲方认为的数据线是苹果手机的数据线,技术团队认为的数据线是安卓手机的数据线,或者有人认为数据线叫充电线也没有问题。这就意味着日常所讨论的术语无法确定其唯一性,并且最终与代码中所使用的术语也不一致,甚者同一个人在讲话和写代码时所使用的术语也是不一致的。所以最终我们可能会看见这样一些术语出现在代码中:DataLine(数据线)、IPhoneDataLine(苹果手机数据线)、ChargingCable(充电线)等等,而它们所表达的含义事实上是同一种,都是甲方口中代表苹果手机的数据线。

所以为什么我们需要统一语言?因为我们需要降低沟通成本,保证沟通的顺畅以提升领域知识的消化速度,同时保持代码在实现过程中名词的一致性以使得代码更加精简等等。

统一语言的作用在《领域驱动设计》第二章有非常详细的描述。而在我的实际开发过程中,因为忽略了其重要性,导致不同的开发人员对于同样一个名词出现了多种不同的实现,进而导致了重复的实现、代码的可读性差、与甲方沟通存在歧义等不良后果。所以在最新的系统设计中,我总是将统一语言放在非常重要的位置,并不停的宣导给其他同事。不得不说,沟通成本确实下降了非常多,相互之间阅读代码也更顺畅了!