小编Vuk*_*oje的帖子

如何知道nuget包在.NET Core上的工作?

我希望在网站或控制台中存在某种过滤器.

nuget .net-core

11
推荐指数
1
解决办法
1124
查看次数

域对象 - "智能对象"与POCO

通过Smart对象,如果属性被更改,我会考虑任何知道其原始属性值的Domain对象.智能对象通常具有基类,并通过使用GetPropertyValue/SetPropertyValue方法实现属性.另一方面,POCO对象通常没有基类并实现简单的属性.

public class SmartObject : BaseDomainObject
{
    public int id
    {
         get { return (int)this.GetPropertyValue("Id"); }
         set { this.SetPropertyValue("Id", value); }
    }
}

public class POCO
{
    public int id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我喜欢Smart对象,因为它为我做了很多艰苦的工作.我可以轻松地将所有这些有用的功能添加到BaseDomainObject中,并将它们放在我的所有派生域类中:

  • 常见属性(如Id,Status ...)
  • 对象状态跟踪(新的,修改的,未更改的)
  • 所有属性都会引发属性更改事件(INotifyProperyChanged的实现)
  • 派生类可以自动序列化(虽然我很少发现这很有用)
  • 我可以拥有所有其他有用的行为 - Clone/Sync/IsPropertyDirty ......

另一方面,POCO非常简单,不依赖于任何基类.

如今我在这里赞美了很多POCO因为:

  1. 它可以通过网络发送(通常作为JSON发送到Web浏览器)
  2. 它是纯粹的

另一方面,我认为上述原因是谬误,因为:

  1. DTO用于电汇而不是域对象.当域对象序列化为JSON时丢失的行为将丢失.
  2. 这种对纯度接缝的追逐就像追逐更贫瘠的领域模型一样,这种模式没有逻辑,也没有任何智能附属于它.

由于这一切都很难过,我仍然喜欢那个POCO而且它让我烦恼.你有什么意见?

.net architecture domain-driven-design domain-model anemic-domain-model

5
推荐指数
1
解决办法
2061
查看次数