域数据模型中的非持久属性
non-persistent properties in domain data model
我听说对于一个小项目,不推荐使用 DTO,例如 here and here。我想知道一个相当小的项目(团队方面)是否可以在域模型中合并非持久属性?例如:
namespace Domain.Entities
{
public class Candidate : BaseEntity
{
public Candidate()
{
// some construction codes
}
// region persistent properties
public string FirstName { get; set; }
public string LastName { get; set; }
public bool? IsMale { get; set; }
public DateTime BirthDate { get; set; }
// other properties ...
// region non-persistent properties
public string FullName => $"{FirstName} {LastName}";
}
}
这只是为了保持简单还是以这种方式丢失了任何有价值的东西?
我不是在提倡特定的方法,只是分享信息...
我不会将您对 FullName 的计算放在 DTO 中。 DTO 只是一个简单的对象,更像是一个结构,不应该包含任何逻辑。 DTO 的目的是将数据从一个 layer/tier 移动到另一个并创建一个间接层,使您的领域模型独立于您的客户而发展。实体上的全名作为非持久性 属性 在这里比在 DTO 中更有意义。如果你想进入完整的企业,那就是 transformer/adapter。
如果你的项目真的很小,而且很可能永远不会增长,那么放弃 DTO 是可以接受的。请记住,如果您的项目增长,您可能需要进行一些重构,并且还有其他一些事情需要考虑...
DTO 的另一个好处是将一些数据保留在需要保留的地方。例如,如果您的实体对象中有敏感数据并且您没有采取措施防止它在 Web 请求中返回,那么您只是从您的应用程序服务器层泄露了一些信息(想想您的用户中的密码字段实体)。 DTO 要求您考虑发送给 to/from 客户端的内容,并使包含数据成为明确的有意行为与无意行为。 DTO 还可以更轻松地记录客户请求真正需要的内容。
话虽这么说,现在每个 DTO 都是您必须编写和维护的代码,这是避免使用它们的主要原因,并且模型更改会对整个系统产生明显的连锁反应。
归结为决定您希望如何处理潜在的数据泄漏、您希望如何管理您的客户(如果可以)以及您的模型可能变得多复杂。
我听说对于一个小项目,不推荐使用 DTO,例如 here and here。我想知道一个相当小的项目(团队方面)是否可以在域模型中合并非持久属性?例如:
namespace Domain.Entities
{
public class Candidate : BaseEntity
{
public Candidate()
{
// some construction codes
}
// region persistent properties
public string FirstName { get; set; }
public string LastName { get; set; }
public bool? IsMale { get; set; }
public DateTime BirthDate { get; set; }
// other properties ...
// region non-persistent properties
public string FullName => $"{FirstName} {LastName}";
}
}
这只是为了保持简单还是以这种方式丢失了任何有价值的东西?
我不是在提倡特定的方法,只是分享信息...
我不会将您对 FullName 的计算放在 DTO 中。 DTO 只是一个简单的对象,更像是一个结构,不应该包含任何逻辑。 DTO 的目的是将数据从一个 layer/tier 移动到另一个并创建一个间接层,使您的领域模型独立于您的客户而发展。实体上的全名作为非持久性 属性 在这里比在 DTO 中更有意义。如果你想进入完整的企业,那就是 transformer/adapter。
如果你的项目真的很小,而且很可能永远不会增长,那么放弃 DTO 是可以接受的。请记住,如果您的项目增长,您可能需要进行一些重构,并且还有其他一些事情需要考虑...
DTO 的另一个好处是将一些数据保留在需要保留的地方。例如,如果您的实体对象中有敏感数据并且您没有采取措施防止它在 Web 请求中返回,那么您只是从您的应用程序服务器层泄露了一些信息(想想您的用户中的密码字段实体)。 DTO 要求您考虑发送给 to/from 客户端的内容,并使包含数据成为明确的有意行为与无意行为。 DTO 还可以更轻松地记录客户请求真正需要的内容。
话虽这么说,现在每个 DTO 都是您必须编写和维护的代码,这是避免使用它们的主要原因,并且模型更改会对整个系统产生明显的连锁反应。
归结为决定您希望如何处理潜在的数据泄漏、您希望如何管理您的客户(如果可以)以及您的模型可能变得多复杂。