- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
DDDSample project ,现在托管在 Github repository ,好像是一个关于如何设计DDD项目的引用。
我注意到域类中的所有 getter 都没有以 get
为前缀(例如:Cargo#delivery
),而它们在域包外部的类中都有前缀(例如:HandlingEventRegistrationAttempt#getTrackingId
)。
Richard C. Martin 在他的《Clean Code》一书中指出:
Accessors, mutators, and predicates should be named for their value and prefixed with get, set, and is according to the javabean standard.
那么,在这种情况下我们应该避免听从他的建议吗?如果是这样,为什么它比一致性更重要?
最佳答案
Why getters from domain classes should not be prefixed with “get” in DDD?
最简单的起点是更改器(mutator);请注意干净代码
中的前一句Mutators should have verbs or verb phrase names like postPayment, deletePage, or save.
这个想法与领域模型不应该贫乏、领域语言应该普遍存在的原则是一致的:我们应该在我们的领域的代码中看到相同的语言专家在解释业务时使用。
这就是为什么您不会经常看到set
,除非该动词碰巧在您的领域中具有重要意义。
访问器和谓词都是查询的示例。正如 Bertrand Meyer 所理解的,查询在不修改实例的情况下提供有关实例的信息,并且它们满足统一访问原则
from the outside, whether a query is an attribute (field in each object) or a function (algorithm) should not make any difference. For example a_vehicle.speed could be an attribute, accessed from the object's representation; or it could be computed by a function that divides distance by time. The notation is the same in both cases, so that it's easy to change representation without affecting the rest of the software.
那么,这些应该如何命名?
沃恩·弗农,在 Implementing Domain-Driven Design ,写道
The method names of Side-Effect-Free Functions are important. Although these methods all return Values (because they are CQS query methods) they purposely avoid the use of the get-prefix JavaBean naming convention. This simple but effective approach to object design keeps the Value Object faithful to the Ubiquitous Language. The use of getValuePercentage() is a technical computer statement, but valuePercentage() is a fluent human-readable language expression.
史蒂文·洛写道
Developers tend to think and talk in development terms, which naturally results in inadvertent models of how instead of what and why. This is common, and it's a tar pit, because developers tend to follow established patterns. What's more, once the true purpose of the code is obscured, it's unlikely that anyone will unearth it.
我会这样表达这个想法:领域专家应该能够阅读领域模型中的代码,并评估其正确性。这意味着域代码不应嵌入与基础设施相关的工件。
罗伯特·马丁对这个想法的拼写?
Reader's shouldn't have to mentally translate your names into other names they know.
(马丁后来断言,术语应该取自解决方案领域,前提是大多数读者都是程序员,而不是领域专家。DDD 的反驳观点是,程序员应该在建模时获取领域专业知识业务。)
关于java - DDD 中域类的 getter 不应以 "get"为前缀,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46139501/
我正在尝试将我的 json 响应传递给适配器类,我正在从其余 api 获得响应,但在改造处理程序类将 json 响应转换为对象数组后,json 对象数组仍然没有传递给适配器类。我没有收到任何日志错误或
我有一个函数的 DLL #include "postgres.h" #include #include "fmgr.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC
我正在尝试使用 schema_of_json 函数从类似 json 的字符串推断模式,然后使用该模式将该字符串值格式化为使用 from_json 函数的结构。我的代码是 import pyspark.
我是一名优秀的程序员,十分优秀!