情况有多糟?我读过无数篇文章,以前从来没有创建过带有行为的抽象DataContracts,但似乎这样做会解决我遇到的一个问题,这个问题将阻止我在任何地方创建工厂来确定子类实现。我的问题是,如果我决定将行为添加到我的数据合同中,我会受到惩罚吗?当然,它们不能被使用,并且在调用存储库调用和数据持久化之前执行特定于该子类类型的特定操作。我可以为每个子类创建"Manager“类,但这让我回到了工厂,我正在尝试一种更具多态性的方法。提前谢谢。
发布于 2009-07-13 18:40:50
您可以将所有想要的行为添加到您的数据契约中。你应该清楚地记录这样一个事实,即客户看不到这种行为,否则以后会有人失望。还要记录这样一个事实,即必须小心不要将任何依赖于实现的数据添加到数据契约中,因为它不是您想要传递给客户端的任何东西。
总而言之,我认为最好让数据契约成为数据契约,并将行为排除在其中。
发布于 2009-07-13 18:28:01
为什么不能以一种经典的方式创建数据契约(MyDataContract),只创建数据字段,不创建其他内容,然后从中派生行为类呢?
public class BehaviorialClass : MyDataContract
{
.....
}这样,你就有了一个很好的,干净的关注点分离,你的数据契约不会被它无论如何都不能真正处理的行为“污染”……
Marc
发布于 2009-07-13 18:35:12
要将行为直接放入DataContracts中,一个很好的折衷方法是将行为定义为extension methods,或者在与契约相同的程序集中定义,或者在完全不同的程序集中定义。可以选择将扩展方法放在契约之外的单独名称空间中,以进一步隔离数据和行为的分离。
这样,您的合同将保持干净,但同时,合同的.NET使用者将有一种简单的方法来导入与这些DataContracts相关的附加功能。
https://stackoverflow.com/questions/1121020
复制相似问题