DDD 以及 Getters 和 Setters 的使用

2023-12-29

我读过一些关于 Getters 和 Setters 的使用的文章/帖子,以及它们如何帮助破坏域模型对象中封装的目的。我理解不使用 setter 背后的逻辑 - 您允许客户端代码在对象业务规则和不变量的上下文之外操作该对象的属性。

现在这位校长仍然让我困惑。例如,如果我需要更改对象的成员变量的值,会发生什么情况?例如,如果一个人的名字发生变化,我如何在模型中反映这一点?起初我想,为什么不有一个名为“ChangeName”的函数,它让我传入新名称,然后它又可以更改内部“name”变量。嗯……那只是一个二传手不是吗!

我需要澄清的是 - 如果我要完全消除设置器,那么在上述情况下,我是否应该仅依赖构造函数参数?我是否应该通过构造函数传递新的属性值来代替旧的属性值,然后我可以通过将对象传递到我拥有的任何持久性基础设施来持久化更改?

这两篇文章在本次讨论中很有用:

  1. http://kellabyte.com/tag/ddd/ http://kellabyte.com/tag/ddd/
  2. http://典型程序员.com/?p=23 http://typicalprogrammer.com/?p=23

嗯,这是一个经典的讨论。 Stack Overflow 上还有其他几个与此相关的线程。

但。获取/设置(自动属性?)并不都是坏事。但它们往往会让您将实体构建为只有 prop 而没有方法的“死”数据容器。这种症状通常被称为贫血区域 - 并且几乎没有什么行为。我的建议是:

  1. 尝试尽可能少地使用道具。
  2. 尝试找到属于一起并且应该是的数据组 像前任一样在一起。名字、中间名和姓氏。另一个例子 是邮政编码、城市、街道。这些数据最好通过 方法。它可以最大限度地减少您的实体无效的可能性。
  3. 通常,属于一起的数据可以分组为值 目的。
  4. 更多的 Value 对象往往会带来更多的描述性方法 来自您的实体,它们是“动词”而不是通常的“名词” 实体。
  5. 您的值对象还可以添加更多方法 行为,也许会减少你的“胖”服务(也许你不 有太多泄露业务逻辑的服务...)。

这里还有更多要说的......但一个简短的答案。 关于在构造函数中设置数据:只有当该实体在没有该数据的情况下无法“生存”/存在时,我才会这样做。对于实体 Person 我想说 Name 可能没那么重要。但社会安全号码可能是构造函数数据的候选者。或者实体 Employee 必须在构造函数中包含 Company,因为员工必须属于公司。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DDD 以及 Getters 和 Setters 的使用 的相关文章

  • 如何从 JavaScript 对象中删除 setter?

    考虑以下代码 var x 0 var o function getter return x Object defineProperty o y get getter set function y x y Object definePrope
  • 数据类中的属性

    描述 我正在尝试实现一个仅包含几个参数的简单数据类 dataclass class ReconstructionParameters img size int CR int denoise bool epochs int learning
  • 领域驱动设计和安全

    这与此相关question https stackoverflow com questions 3006808 security implementation in domain driven design这似乎是不久前问过的 项目中的安全
  • 在 JavaScript 中覆盖对象的括号 [index] getter/setter?

    我目前正在构建一个双向链表 http en wikipedia org wiki Doubly linked list执行 我正在尝试 或希望 做的是使用 setter getter 来设置列表中的元素 就像在数组中一样 var index
  • 如何在领域层使用工作单元

    我正在尝试在 我的服务 类中使用工作单元模式 我有我的 CompanyService 课程 public class CompanyService ICompanyService private readonly ICompanyRepos
  • 是否有在基于 DDD 的分层架构中的模型层和数据访问层之间使用 LINQ 的建议模式

    我一直在读蒂姆 麦卡锡的书关于 NET 中的 DDD 的精彩书籍 http www amazon co uk NET Domain Driven Design Solution Programmer dp 0470147563 但在他的示例
  • DDD和应用层

    我在DDD中添加 Stateful Stateless WebService等是应用层 应用服务 吗 从下面的链接来看 这似乎是正确的 第二个问题 我创建了一个存储库类 所有涉及存储库的方法调用都应该包装在应用程序服务中吗 或者我可以直接在
  • DDD 领域模型复杂验证

    我正在努力使用域驱动设计原则重写我的 ASP NET MVC 应用程序 我正在尝试验证我的用户实体 到目前为止 我能够验证基本规则 例如用户名和密码是非空 空白字符串 然而规则之一是 我需要确保用户名是唯一的 但是 我需要访问数据库才能执行
  • Swift 协议只能设置吗?

    为什么我可以毫无错误地执行此操作 var testDto ModelDto modelId 1 testDto objectId 2 当我定义这个时 protocol DataTransferObject var objectType Dt
  • 为什么基元的包装类没有 setter?

    包装类 如 Integer Double 等 没有为其内部原始值设置 setter 的原因是什么 我问这个问题是因为这种功能可以简化微积分 并使 Java 语言更加灵活 让我举一些例子 1 我们看下面的例子 Integer x new In
  • 涵盖 .NET 中的 TDD、DDD 和设计模式的书籍

    我想要一本能够真正让我全面了解使用 C TDD ASP NET MVC DDD 和设计模式 例如存储库模式 的现代 ASP NET 开发的书 我非常擅长 C 和 ASP NET MVC 但想填补空白 如果您对涵盖这些主题的一两本书有很好的体
  • 计算 3D 中两点之间的距离

    我的任务是创建主类 在其中将任意点的值初始化为 0 0 0 并且能够单独访问和改变所有三个值 x y z 为此 我使用了 getter 和 setter 我的下一个任务是在我的主类中创建一个方法 我将其称为 distanceTo 来计算两点
  • Symfony2:在实体类中获取 security.context

    是否可以得到security context在实体类中 我知道以下不起作用 我不知道如何实施 user part Set createdAt ORM PrePersist public function setCreatedAt user
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 上传到服务器后,页面上只有一个 getter 起作用

    我有一个使用 Struts2 框架的网站 它在我的本地计算机上运行良好 但是当我将其上传到远程服务器 托管 时 一些 getter 和 setter 变得不调用 例如 操作 ForecastAction java JSP 预测 jsp 这是
  • 有丰富的领域模型示例吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个简单的示例来说明使用富域模型的好处 理想情况下 我想要一个之前和之后的代码列表 应该尽可能
  • 多态性:ORM 实体是领域实体还是数据实体?

    我有一个 BankAccount 表 LINQ to SQL 生成一个名为 BankAccount 的类 如下所示 global System Data Linq Mapping TableAttribute Name dbo BankAc
  • Swift 中的数据封装

    我已阅读全文斯威夫特书 https itunes apple com us book swift programming language id881256329 mt 11 并观看了所有全球开发者大会视频 https developer
  • 如何在 CQRS 中处理基于集合的一致性验证?

    我有一个相当简单的域模型 涉及一系列Facility聚合根 鉴于我使用 CQRS 和事件总线来处理从域引发的事件 您如何处理集合的验证 例如 假设我有以下需求 Facility必须有一个唯一的名称 由于我在查询端使用最终一致的数据库 因此在
  • 身份验证和用户任务

    我正在考虑开发一个具有明确定义域的系统 主要基于网络 域的一部分包括像这样的实体Diary Booking Customer etc 不过我创建了另一个名为User其目的仅用于身份验证和授权 污染Customer具有特定于身份验证的数据的实

随机推荐

  • Java 线程等待锁定未(明显)锁定的对象

    通常 当我要求进行线程转储时 很容易解释性能不佳的系统的症状 即通常情况下 我可以看到许多线程显然正在等待已被另一个线程获取但未释放的监视器 在本例中 我有很多线程在等待监视器 0x965ad100 但似乎没有一个线程首先拥有该监视器 可以
  • 如何对数据库中的商品进行折扣建模?

    我正在建立一个电子商务网站 并希望在有限的时间内为某些商品提供折扣 我的产品表 MySQL 如下所示 Product productId Name Weight Price price as on the cover of the item
  • 使用 QAction 而不添加到菜单(或工具栏)

    我正在尝试开发一个具有非常模块化的命令方法的应用程序 并且认为这会很好 因为我正在使用 pyqt 使用 QAction 将快捷方式绑定到命令 但是 似乎操作快捷方式仅在操作在菜单或工具栏中可见时才起作用 有谁知道如何在不可见的情况下让此操作
  • Swift 和 CoreData 使用自定义类作为可转换对象

    我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象 我一直在浪费时间试图弄清楚但无法解决 我不断收到两个错误 无法将属性标记为 NSManaged 因为它的类型无法在 Objective C 中表示 并且属性无法
  • 捕获字符串格式中的 **vars() 模式

    我经常发现自己使用以下模式进行字符串格式化 a 3 b foo c dict mykey myval prints a is 3 b is foo mykey is myval print a is a b is b mykey is c
  • 如何调用 SQLitePCL.Batteries.Init()?

    我正在尝试为我的应用程序创建 SQLite 数据库 但遇到了此错误 System Exception 您需要调用 SQLitePCL raw SetProvider 如果 您正在使用捆绑包 这是通过调用完成的 SQLitePCL Batte
  • 如何使用 Firefox 扩展上传二进制内容?

    在我的 Firefox 扩展中 我下载了该文件 然后该扩展应该上传它 我执行以下操作 downloading file var persist Components classes mozilla org embedding browser
  • AppDomain.CurrentDomain.AssemblyResolve 请求 .resources 程序集?

    使用代码如何将附属程序集嵌入到 EXE 文件中 https stackoverflow com questions 1453755 how to embed a satellite assembly into the exe file 14
  • 多列透视

    我正在努力根据交易数据表生成一个枢轴 我的数据表如下 Date Store Customer Value 01 12 15 StoreA Cust1 3 80 01 12 15 StoreB Cust2 2 40 01 12 15 Stor
  • 如何使用 MagicalRecord 设置 Core Data 轻量级迁移?

    我在尝试使用 MagicalRecord 设置核心数据的轻量级迁移时遇到了困难 我使用 Google 和 SO 查看了有关此主题的所有帖子 我明白如何持久存储协调器有效以及我尝试进行的设置也可以执行的操作 这是我的代码 AppDelegat
  • 在休眠状态下禁用ONLY_FULL_GROUP_BY

    我需要在休眠中禁用 ONLY FULL GROUP BY 这是我当前的会话工厂 我不确定如何在此指定 sql mode
  • 使用延迟链循环进行多个 ajax 调用

    有多个问题已经有关于此问题的答案 但到目前为止 在这种设置下所有问题都不起作用 function login u p console log 1 return post url u p function out console log 3
  • 在 IIS7 的 web.config 中设置集成模式

    在 IIS7 中 您现在拥有集成模式和经典模式 是否可以使用 web config 强制站点在集成模式下运行 而无需访问 IIS7 我问的原因是我最近注册了 Mosso 需要以集成模式而不是经典模式运行我的网站 我知道我可以打电话给他们 也
  • 如何将 WebDAV 合并到我的 iPhone 应用程序中?

    我想将 WebDAV 添加到我的 iPhone 应用程序中 实现此功能的最佳方法 库是什么 WebDAV 只是 HTTP 的扩展 因此 您可以使用 iPhone 上可用的任何现有 HTTP API 来实现 WebDAV 假设您的需求不需要对
  • 作为语言基准的琐碎数学问题

    为什么人们坚持使用琐碎的数学问题 例如在斐波那契数列中查找数字 作为语言基准 这些通常不会针对相对论速度进行优化吗 首当其冲的瓶颈通常不是在 I O 系统 API 调用 字符串和结构操作 处理大量数据 抽象面向对象的东西等方面吗 这是对过去
  • 如何在 ido 模式 (Emacs) 下更改驱动器号?

    我在 Windows 上使用 Emacs 我的默认文件夹是c home 但我想编辑我的文件d 在ido模式下怎么做 我试过 但这让我陷入了c Currently I use C f change back to normal find fi
  • 如何实时验证和修正Excel中的数据?

    我知道 Excel 具有数据验证功能 但是有没有办法自动为用户应用更改 而不是提示他们存在问题 例如 我们有一个通用电子表格模板供内部系统添加项目 在第一列中 对于 项目编号 不能有任何非法字符 因此 如果用户在 A1 中输入 AN XR1
  • 在Go中,如何确定数组中切片的偏移量?

    我知道a1是数组中的一个切片a 是否可以确定偏移量a1相对于 的开始a 基本上模拟指针算术 a int8 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 a1 a 3 14 fmt Println a1 has leng
  • 如何在 Amazon EC2 中上传 Tomcat 的库

    我需要将 lib 上传到我的 Tomcat 文件夹 在 EC2 实例中 我一直以来所做的就是 scp r i home path to key key pem home path to file file jar ec2 user my a
  • DDD 以及 Getters 和 Setters 的使用

    我读过一些关于 Getters 和 Setters 的使用的文章 帖子 以及它们如何帮助破坏域模型对象中封装的目的 我理解不使用 setter 背后的逻辑 您允许客户端代码在对象业务规则和不变量的上下文之外操作该对象的属性 现在这位校长仍然