带有ASP.NET Web API的N-Teir体系结构

本文关键字:N-Teir 体系结构 API Web ASP NET 带有 | 更新日期: 2023-09-27 18:00:02

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

在这种情况下,已经有一个现有的数据库,所以我想使用实体框架的数据库优先方法。

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

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

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

我想我的问题是,如果我想从windows服务创建一个Employee对象并将其传递到我的Web API(以便它可以将其插入数据库),那么windows服务如何在不将类库添加到windows服务项目的情况下获取Employees对象?

带有ASP.NET Web API的N-Teir体系结构

在n层解决方案中,您不会跨物理边界传递域对象,但您实现了数据传输对象(DTO),该对象只保存使用者/调用者所需的信息。

通常,您将创建一个共享库,该库将具有整个数据传输对象并且这将被服务器和客户端引用。

之后,我们将使用JSON序列化程序来序列化和/或反序列化数据传输对象

域对象将始终映射到数据传输对象,因为这些对象比完整对象轻。问自己一个问题:如果消费者只需要某人的名称第二个名称

此外,在客户端应用程序和服务中避免服务器依赖性也很重要。

一些有用的提示:

  • 了解什么是DTO:http://en.wikipedia.org/wiki/Data_transfer_object和http://martinfowler.com/eaaCatalog/dataTransferObject.html

  • 检查AutoMapper以及如何节省时间以便将域对象映射到数据传输对象:http://automapper.org/

通常创建用于Web API的exra模型类。这些模型类通常只包含实体数据的一个子集。此外,这种区别允许您创建真正的RESTful API
在Web API控制器类中,Model和Entity之间的映射发生了
windows服务只引用具有Model类的项目,而不引用具有Entity类的项目。