N-层架构与ASP.NET Web API

7

我试图理解这个概念。我编写了几个不同的Web API,但它们总是被网站使用并通过JSON进行交互。我有一个关于如何构建实现结构的问题,当Web API将被Windows服务使用时。

在这种情况下,已经存在一个数据库,因此我想使用Entity Framework的数据库优先方法。

我为模型创建了一个类库项目,并使用Entity Framework查看现有数据库并生成所有所需的类。

然后我创建了一个Web API项目,并将我的所有模型与类库添加到其中。到目前为止,一切都很好。

我的问题是,当我要构建将与Web API交互的Windows服务时,如何访问来自我的类库模型项目的类?我知道我可以将该项目添加到我的Windows服务中,但这似乎不是正确的方法,因为这基本上会绕过Web API。

我想问的是,如果我想从我的Windows服务创建和传递一个Employee对象到我的Web API(以便将其插入数据库),那么Windows服务如何获取Employee对象而不将类库添加到Windows服务项目中?

2个回答

10
在n层解决方案中,您不会通过物理边界传递领域对象,而是实现仅由消费者/调用者保留所需信息的数据传输对象(DTO)。
通常,您将创建一个共享库,其中包含整个数据传输对象,并且这将被服务器和客户端引用。
之后,一切都要使用JSON序列化器来序列化和/或反序列化您的数据传输对象。
领域对象将始终映射到数据传输对象,因为这些比完整对象更轻。问自己一个问题:如果消费者只需要某人的名字和姓氏,为什么要通过网络发送更多数据?
此外,避免在客户端应用程序和服务中依赖于服务器。
一些有用的提示:
- 了解什么是DTO:http://en.wikipedia.org/wiki/Data_transfer_objecthttp://martinfowler.com/eaaCatalog/dataTransferObject.html - 检查AutoMapper以及如何节省时间以将领域对象映射到数据传输对象:http://automapper.org/

0
通常情况下,您需要创建额外的模型类来用于Web API。这些模型类通常只包含实体数据的子集。此外,这种区分使您能够创建真正的RESTful API。
在Web API控制器类中,模型和实体之间的映射发生。
Windows服务仅引用具有模型类而不是实体类的项目。

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