REST API中对象的设计模式?

4
我使用WCF Web API Preview构建了一个REST API,并想要使用你传递到该API的类构建一个库(以使.Net开发人员的生活更轻松)。这些应该是简单的POCO类,没有太多功能。
但在接收端,我想为这些类添加一些功能。下面是一个示例:
[WebInvoke(UriTemplate = "", Method = "POST")]
public Supertext.API.Order Create(Supertext.API.Order apiOrder)
{

以下是一个POCO类的示例:

public class Order
{
    public string Service { get; set; }

    public string OrderTitle { get; set; }

    public string Currency { get; set; }
}

那么,如何在服务器端扩展这个类呢?
我猜使用子类不起作用。 委托?
实际上需要两个不同版本的类吗?一个给客户端,另一个给服务器?

其他人是怎么做的?


1
我不了解Web API,但既然你的Order是一种DTO,难道你不应该让它保持简单和清晰,而将功能构建在其他地方吗?或者你是在考虑像验证等方面的问题? - Matt Roberts
正确,问题是什么是最好和常见的方法来做到这一点? - Remy
1个回答

2
将此POCO类添加额外功能的问题在于,您正在将其转变为域对象。这个域对象的性质现在将受到约束,因为本质上,这个类充当了操作接口的定义。更改有关此类的详细信息可能会破坏客户端。
将此类保持纯粹作为数据传输对象是一个更清晰的模型,其单一职责是帮助桥接电线格式和对象,并使用诸如AutoMapper之类的映射器将数据从DTO映射到真实域对象。真正的域对象完全在您的控制之下,您可以愉快地重构它,而不会威胁到您的服务消费者的级联效应。

好的,但这也意味着我基本上有两个具有相同属性的类,对吗?那么Partial类怎么样?那是一个坏主意吗?我在这里看到了http://msdn.microsoft.com/en-us/library/cc716747.aspx - Remy
最初,这些类可能看起来非常相似,但随着您决定在内部以不同于线路格式的方式表示数据,情况可能会发生变化。部分类仍然使单个类具有多个职责。分离的类可以更清晰地分离关注点。 - Richard Blewett
好的,没问题。我会尝试一下。 - Remy
1
我们有资源类和领域类。它们目前有95%的相似度。我们使用自动映射器在它们之间进行映射。我们也分别对它们进行验证。我们使用T4从领域类生成资源类。 - suing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接