从DDD DSL DCI 说起

从DDD DSL DCI 说起
www.zeeklog.com  - 从DDD DSL DCI 说起
软件行业隔一段时间大家就喜欢造一些名词,比如xx化,服务化,动态化,配置化等,你可以头脑风暴下,你可以搞出多少“化”来。比如最近火的都不是数据化,智能化了,而是什么“数智化”了,你说神奇不。

当然并不是所有的名词都向着贬义的方向演进,很多名词可以便于我们去理解一些新的概念,或是用不同的角度看待一个问题或者场景。相信我们总会有一些东西,感觉介于几个概念之间,但是有拿不准他应该属于哪里,比如就有今天讲的这几个。

DDD (Domain-Driven Design)和 DSL(Domain-Specific Language)、DCI(Data,Context, Interactive)的关系,很多人心存疑问。

DDD 概念作为一种软件开发的指导思想,为软件开发带来的好处主要有以下几点:

  1. 最大好处就是所有参与者围绕一个统一的领域模型工作,传统的分析模型和设计模型不再割裂,不管是做设计、做分析还是写代码、写文档,脑海中所构建的画面都是一致的。

  2. DDD 是一个软件开发过程,它显式地把领域和设计放到了软件开发的核心,软件人员和业务人员受到同样的重视,他们合作来构建领域模型,使得软件的交付质量更高且维护成本更低;

  3. DDD 提出的分层架构,有效分离了业务复杂度和技术复杂度,凸显了领域模型,使得领域层的代码和领域模型保持高度一致;

  4. 统一语言非常重要,每个概念在各自的上下文中是清晰的无歧义的,同时要控制领域模型的复杂度,于是 DDD 在战略上提出了分离子域(问题域空间)和拆分 BC(解决方案空间)的模式,BC 间通过 Context Mapping 来集成;

  5. DDD 在战术层面提出了很多模式(聚合、实体、值对象、服务、工厂、仓储),对领域模型中的元素进行了分类,并给出了每类元素在领域模型中的职责和特征,降低了领域模型的构建成本。

作为相近概念的DDD 和 DSL、DCI 之间存在一定的关联性。

DDD 和 DSL 的融合有三点,面向领域、模型的组装方式以及分层架构演进。DSL 可以看作是在领域模型之上的一层外壳,可以显著增强领域模型的能力。

主要有两个:

  1. 提升了开发人员的生产力;
  2. 增进了开发人员与领域专家的沟通。

DSL 可以用于描述流程契约,友好且学习成本也很低(当然是在设计好的角度来说,设计的差的话,徒增压力)。

对于 DSL,需要注意以下几点:

  • 统一语言非常重要;
  • 分离子域和拆分 BC 的模式;
  • 提出的模式包括聚合、实体、值对象等。

DCI 对一些开发人员的影响可能比 DDD 和 DSL 还大,因为开发人员每天都在不断倒腾代码,想让代码的组合性更强,以便快速应对需求的变化。

其实不理解这些名词也不用着急,技术行业日新月异,技术名词不断更迭,很多时候换汤不换药,换了面子里子还是一样的。

我就不信了,写好代码还能跑得出“面向对象思想”这六个字的手掌心?

写代码没那么多修饰和装饰,主要体现的还是最朴素的道理,比如:

Read more

超快速,使用ChatGPT编写回归和分类算法

超快速,使用ChatGPT编写回归和分类算法

本文将使用一些 ChatGPT 提示,这些提示对于数据科学家在工作时非常重要。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 以下是一些示例ChatGPT 提示的列表以及数据科学家的响应。 ChatGPT 提示 为决策树回归算法生成 python 代码。 下面是使用scikit-learn在 Python 中进行决策树回归的示例代码: import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor # Generate random data rng = np.random.default_rng() x = 5 * rng.random(100) y = np.sin(x) + 0.

By Ne0inhk
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

993.二叉树的堂兄弟节点 难度:简单 题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。 示例: 示例 1: 输入:root = [1,2,3,4], x = 4, y = 3 输出:false

By Ne0inhk
1239.串联字符串的最大长度 关于字符串的回溯算法!

1239.串联字符串的最大长度 关于字符串的回溯算法!

题目: 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串, 如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。 请返回所有可行解 s 中最长长度。 提示: 1 <= arr.length <= 16 1 <= arr[i].length <= 26 arr[i] 中只含有小写英文字母 示例: 示例 1: 输入:arr = ["un","iq","ue"] 输出:4 解释:所有可能的串联组合是

By Ne0inhk