7

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

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

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

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

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

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

4

2 回答 2

10

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

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

之后,就是使用 JSON 序列化器来序列化和/或反序列化您的数据传输对象

域对象将始终映射到数据传输对象,因为它们比完整对象轻。给自己一个问题:如果消费者只需要某人的姓名第二个名字,为什么您需要通过网络发送更多数据?

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

一些有用的提示:

于 2013-02-18T14:06:02.060 回答
0

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

于 2013-02-18T14:00:25.857 回答