知识卡片

私有Setter护规则

普通读书笔记卡 · 1764.e

内容

公开setter让外部任意改状态,聚合就无法保证自己的不变性。把状态变化收敛到命名清晰的业务方法中,既表达统一语言,也让每次修改都经过规则检查。

参考来源

- 位置:《复杂软件设计之道》第4章《实体和值对象》"4.6.1 将公有setter方法变为私有"一节(源文件:_chapter_text/ch04.txt) - 结论依据:原文明确"让失血模型变成充血模型的第一步是使用私有的setters方法……这样模型以外的地方就无法调用该模型的setter方法,从而避免了让模型对象的属性由外部调用者直接定义",并以聚合A包含B、C为例说明"这体现了A作为聚合根的带头作用……保证了A的数据所有权边界"。 - 原始内容:失血模型是只有属性的setter/getter方法,让失血模型变成充血模型的第一步是使用私有的setters方法,也就是将public改为private,这样模型以外的地方就无法调用该模型的setter方法……这体现了A作为聚合根的带头作用……这样保证了A的数据所有权边界,不用担心A在各种复杂的使用情况下会被无意或有意地修改。