使用Web API和类信息

本文关键字:类信息 API Web 使用 | 更新日期: 2023-09-27 18:19:11

我目前在Visual Studio解决方案中有以下项目

  • MySiteAPI - Web API
  • MySiteMVC - MVC 5模板

MySiteAPI正确地在http:''localhost'api上提供数据,我想在MySiteMVC中消费。

MySiteAPI目前有实体框架代码优先类来处理数据端

我对如何将数据拉入MySiteMVC上的类定义感到困惑,因为定义在MySiteAPI项目中,而不是在MySiteMVC中。似乎Web API不能作为Web引用来调用以获取类信息,这就是我卡住的地方。

我相信这是一个架构上的问题,在我重组这个项目之前,我想确保我理解了正确的方法。

我不想把MySiteAPI引用到MySiteMVC中,因为那样会破坏两个项目的分离。我正试着更坚定地对待这件事。

而不是将类定义在MySiteAPI项目中,应该创建一个类库来处理两个项目引用的数据的实体框架?

如果是这样,类库是否只包含类定义,而MySiteAPI项目将是通过DbContext进行数据库操作的项目?这对我来说似乎是最有意义的。

在这种情况下,将有三个项目

  • MySiteModels -保存类定义
  • MySiteAPI
  • MySiteMVC
MySiteAPIMySiteMVC都将引用MySiteModels

这样做正确吗?有没有更合适的方式?

使用Web API和类信息

是的,你的问题似乎是架构上的。有许多不同的方法可以为你的问题实现更好的架构(这也取决于项目的规模),但我将描述我认为最适合,最灵活,最适合中型项目的可测试方法。

模型是在独立的类库项目中定义的,例如MyProject.Models。在这个项目中,只有POCO不了解WebApi, Mvc或实体框架项目。它们应该完全解耦,并且可以从任何其他项目中使用。

"实体框架项目"或"数据"也在单独的类库项目中定义,例如MyProject.Data。该项目仅引用实体框架和Models项目。这里定义了派生的DbContext类。该项目负责连接和操作数据库。如果你使用RespoistoryUnit Of Work模式(我认为这比在你需要的地方初始化DbContext要好得多),它们也可以放在这个项目中。

WebApiMvc是两个独立的"客户端"项目。两者都引用了模型项目,WebApi也引用了数据项目和实体框架。但是两个客户项目彼此一无所知。如果需要,您可以给它们提供它们的thin (dll)依赖项,并将它们托管在不同的服务器上。如果MVC项目将使用个人用户身份进行身份验证,则应该引用其他类似的项目结构(数据、模型、实体框架、分离的DbContext)或使用已经定义的结构。

如果你计划测试你的代码(我推荐它),将会有一个(或多个)测试项目,例如MyProject.Tests。测试项目引用Models, Data(或Data的假实现)和WebApiMvc项目取决于测试的内容。

对于DbContext, Repository, Unit of Work和其他一些类,应该有很少的接口,这些接口可以放在不同的类库中用于公共接口。

让我们总结:

  1. 。。模型——POCO数据模型。没有其他参考资料。
  2. 。。数据——DbContext, Repository, Unit of Work。参考模型和实体框架。
  3. 。。WebApi - WebApi项目。参考文献-模型,数据,实体框架。
  4. 。。MVC - MVC项目。参考文献-模型(可选数据和实体框架).
  5. 。。测试——测试项目。参考资料-模型,数据(或假数据),测试项目。