DataContracts与行为

use*_*985 8 wcf datacontract

有多糟糕?我已经阅读了无数文章,从未创建过具有行为的抽象DataContracts,但似乎这样做将解决我遇到的问题,这将阻止我在各处创建工厂以确定子类实现.我的问题是,如果我决定在数据合同中添加行为,我会受到惩罚吗?当然,在调用存储库调用并保持数据之前,它们不能被消耗并且在那里执行特定于该子类类型的某些操作.我可以为每个子类创建"Manager"类,但这会让我回到工厂,我正在尝试更多的多态方法.提前致谢.

Joh*_*ers 13

您可以将所需的所有行为添加到数据协定中.您应该清楚地记录这样的事实,即客户看不到该行为,或者稍后会有人失望.还记录了必须注意不要将任何依赖于实现的数据添加到数据协定中的事实,因为它不是您想要传递给客户端的任何内容.

总而言之,我认为最好让数据合同成为数据合同,并将这些行为排除在外.


mar*_*c_s 8

为什么不能以经典的方式创建数据契约(MyDataContract),只是数据字段,没有别的,然后从中派生你的行为类?

public class BehaviorialClass : MyDataContract
{
.....
}
Run Code Online (Sandbox Code Playgroud)

这样,你就可以很好地分清问题了,你的数据合同并没有被它无法解决的行为"污染".....


Ray*_*gus 6

将行为直接放入DataContracts中的一个很好的折衷方案是将行为定义为与合同相同的程序集中的扩展方法或完全不同的程序集.可选地,可以将扩展方法放置在与合同不同的命名空间中,以进一步隔离数据和行为的分离.

这样,您的合同保持清洁,但与此同时,您的合同的.NET消费者可以轻松地导入与这些DataContracts相关的其他功能.