通过智能对象,如果属性被更改,我会考虑任何知道其原始属性值的域对象。智能对象通常有一个基类并通过使用 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; }
}
我喜欢智能对象,因为它为我做了很多艰苦的工作。我可以轻松地将所有这些有用的功能添加到 BaseDomainObject 并将它们放在我所有的派生域类中:
- 常用属性(如 Id、Status...)
- 对象状态跟踪(新的、修改的、未更改的)
- 所有属性都会引发属性更改事件(INotifyProperyChanged 的实现)
- 派生类可以自动序列化(虽然我很少发现这很有用)
- 我可以拥有所有其他有用的行为 - 克隆/同步/IsPropertyDirty...
另一方面,POCO 非常简单,不依赖于任何基类。
现在我在这里有很多 POCO 称赞,因为:
- 它可以通过网络发送(通常以 JSON 格式发送到 Web 浏览器)
- 它是纯的
另一方面,我认为上述原因是谬误的,因为:
- DTO 用于电汇而不是域对象。当域对象序列化为 JSON 时封装数据的行为。
- 这种追求纯度接缝就像追求更加贫乏的领域模型,它没有逻辑,也没有任何智能附加在它上面。
带着这一切悲伤,我仍然喜欢那个 POCO,它让我很烦恼。你有什么意见?