什么是CUPID快乐编码?


CUPID 的五个属性是:

  • Composable可组合:与其他人一起玩得很好
  • Unix哲学:做好一件事
  • Predictable可预测的:做你期望的
  • Idiomatic惯用语:感觉自然
  • Domain-based基于领域:解决方案领域以语言和结构对问题领域进行建模

可组合
易于使用的软件会被使用、使用、再使用。有些特性使代码或多或少具有可组合性,但这些特性对于做出任何保证既不是必要的也不是充分的
对别人输入开放,对自己输出严格。

Unix哲学
类似单一职责SRP,但是“做好一件事”是一种由外而内的观点;它是具有特定的、定义明确的和全面的目的的属性。SRP 是一种由内而外的观点:它是关于代码的组织。

可预测的
代码应该按照它看起来的方式工作,一致且可靠,没有令人不快的意外。确认这一点不仅可能而且容易。从这个意义上说,可预测性是可测试性的概括。
可预测的代码应该按预期运行,并且应该是确定的和可观察的。

惯用语
每个人都有自己的编码风格。无论是空格还是制表符、缩进大小、变量命名约定、大括号或圆括号的放置、源文件中的代码布局,还是无数其他可能性。在此之上,我们可以对库、工具链、生存路径、甚至版本控制注释样式或提交粒度的选择进行分层。

基于领域
领域驱动代码成功的一个标准是,一个不经意的观察者无法判断人们是在讨论代码还是领域。

使用基于领域的语言很重要,但如何构建代码也同样重要。许多框架都提供了一个“骨架项目”,其中包含旨在帮助您快速入门的目录布局和存根文件。这在您的代码上强加了一个先验结构,与您正在解决的问题无关。
相反,代码的布局——目录名称、子文件夹和同级文件夹的关系、相关文件的分组和命名——应该尽可能地反映问题域。

当我们以我们想要的方式构建代码并以我们想要的方式命名时,模块边界就变成了域边界,部署变得简单明了。将组件部署为单个工件所需的一切都在一起,因此我们可以将域边界与部署边界对齐,并部署内聚的业务组件和服务。无论您是将您的产品或服务打包为一个整体、许多小型微服务,还是介于两者之间的任何地方,这种一致性都会降低您生活道路的复杂性,并使您不太可能忘记某些东西,或包含来自不同环境或一个不同的子系统。
这并不会将我们限制在单一的、扁平的、顶级的代码结构中。域可以包含子域;组件可以包含子组件;部署可以发生在对您的变更和风险状况有意义的任何粒度级别。将代码边界与域边界对齐可以使所有这些选项更易于推理和管理。


详细点击标题