c# - 领域层类的范围

标签 c# oop domain-driven-design encapsulation single-responsibility-principle

在我的域层中,我有一个名为“Client”的类。通常我只会在类中创建与该客户端直接相关的属性,例如 - 'Firstname'、'Lastname'、'Address' 等,以及与客户端相关的方法。

我的问题是,如果向此类中添加一个对一组客户端执行工作的方法,是否会被认为是糟糕的 OO 设计?

例如- 假设我想对客户执行一项操作,例如更新他们的电子邮件地址。在执行此操作之前,我想确保没有其他客户端使用相同的电子邮件地址,因此我在客户端类之外创建了一个名为 ValidateEmail(string emailAddress) 的方法。

在此方法中,查询客户存储库以查找具有该电子邮件地址的任何现有客户,并返回一个 bool 值。

这会被认为是糟糕的 OO 设计吗?我宁愿不必创建任何其他类或填充 UI 层 - 具有此验证的 Controller 逻辑,它似乎适合 Client 类,但感觉对 sibling 执行操作不太正确..

谢谢

最佳答案

如果是我,我会使用 ClientCollection 类。无论如何,除了名称之外,您几乎拥有此功能,所以我认为这没什么大不了的。

作为该类的一部分,我可能有一个名为 GetClientsWithEmail 的方法,它返回具有特定电子邮件地址的客户列表。通过这种方式,这个方法纯粹是一个查找,不包含任何业务逻辑。事实上,我可以在这里设想一行 linq。

当有人试图更新客户的电子邮件地址时,您将获得一些验证码。这可能是也可能不是 Client 类的一部分(您指出它是,但不一定是)。总之,这段验证码可以调用ClientCollection.GetClientsWithEmail方法,测试返回的Client对象个数是否为0。

关于c# - 领域层类的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895865/

相关文章:

c# - 移动文件 3 次时出现异常

PHP, fatal error : Call to undefined method, 为什么?

java - 解释变量隐藏在这个 Java 代码中是如何工作的

java - 显示 setter/getter

c# - 如何使用环回 IP 检索身份验证 token

c# - 如果共享同一父节点的另一个节点等于某个值,如何获取 XML 节点的值?

c# - 如果将两个类的函数放在一个委托(delegate)中会发生什么?

c# - 遵循 DDD 概念设计存储库

mysql - SQL模式设计和规范化

c# - 我的 DDD 工厂类中应该有哪些方法?