architecture - 领域对象设计

标签 architecture domain-driven-design audit

在设计领域模型时,应该坚持代表问题领域的事物,并且领域模型不应包含审计信息。

所以,如果我要设计一只猫,它可能看起来像这样:

public Cat {
    private Color furColor;
    private Color eyeColor;
    private boolean isDeclawed;
    etc...
} 

我永远不应该拥有像“updateDate”和“createTime”这样的属性,对吗?

现在,如果 Web 应用程序要在屏幕上显示一张猫的表格,您可能会这样:

Name    Eye Color  Claws?    Last Updated
------  ---------  ------    ------------
Fluffy  Green      No        10/31/2012
etc...

So, if you don't keep the last update time in your domain model, how does one (properly) get that data to the page?

Obviously, I could have a poorly designed domain model, but I want to do it better.

I had considered creating an object that accepts a generic so that I could keep my domain model pristine. i.e.

public PersistableObject<T,K> {

    private T domainObject;
    private Date updateDate;
    private User updateUser;

    getters, setters, etc...
}

但是,恐怕我会遇到一些问题。

我对“域模型”和“更新日期”等进行了大量搜索...但我认为我错过了正确的术语。

有人能指出我正确的方向吗?

最佳答案

在你的场景中,我不确定我是否同意第一句话。如果您的域的一般用途包括需要显示这些日期,那么它们可以(并且很可能应该)成为您的普通域对象的一部分。

如果你想清理你的域对象,你可以简单地创建一个接口(interface)来保存那些公共(public)字段。

public interface ITrackedObject
{
    DateTime LastUpdated { get; set; }
    //etc....
}

public class Cat : ITrackedObject
{
    public DateTime LastUpdated { get; set; }
    //....
}

关于architecture - 领域对象设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581715/

相关文章:

c# - 域驱动设计中每个实体的创建者、编辑者、创建日期、修改日期属性

c# - 为什么要在 UpdateAsync 上设置 CreationTime 和 CreatorUserId?

c# - 如何减少 Controller 和业务层服务中构造函数参数的数量?

c# - 如何获得有关 CQRS 更改的即时反馈

c# - 对于 C# 中的多客户端 TCP 服务器,如何在线程之间划分工作?

domain-driven-design - 如何在CQRS中为银行转帐建模

design-patterns - 如何打破 Grails 域类之间的硬依赖

c++ - 如何使用libaudit?

c# - 一个迷路的程序员寻求建议

elasticsearch - CQRS:在 ElasticSearch 读取模型中项目乱序通知