使用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
这样做正确吗?有没有更合适的方式?
是的,你的问题似乎是架构上的。有许多不同的方法可以为你的问题实现更好的架构(这也取决于项目的规模),但我将描述我认为最适合,最灵活,最适合中型项目的可测试方法。
模型是在独立的类库项目中定义的,例如MyProject.Models
。在这个项目中,只有POCO不了解WebApi, Mvc或实体框架项目。它们应该完全解耦,并且可以从任何其他项目中使用。
"实体框架项目"或"数据"也在单独的类库项目中定义,例如MyProject.Data
。该项目仅引用实体框架和Models项目。这里定义了派生的DbContext
类。该项目负责连接和操作数据库。如果你使用Respoistory
或Unit Of Work
模式(我认为这比在你需要的地方初始化DbContext要好得多),它们也可以放在这个项目中。
WebApi
和Mvc
是两个独立的"客户端"项目。两者都引用了模型项目,WebApi
也引用了数据项目和实体框架。但是两个客户项目彼此一无所知。如果需要,您可以给它们提供它们的thin (dll)依赖项,并将它们托管在不同的服务器上。如果MVC项目将使用个人用户身份进行身份验证,则应该引用其他类似的项目结构(数据、模型、实体框架、分离的DbContext)或使用已经定义的结构。
如果你计划测试你的代码(我推荐它),将会有一个(或多个)测试项目,例如MyProject.Tests
。测试项目引用Models
, Data
(或Data
的假实现)和WebApi
或Mvc
项目取决于测试的内容。
对于DbContext, Repository, Unit of Work和其他一些类,应该有很少的接口,这些接口可以放在不同的类库中用于公共接口。
让我们总结:
- 。。模型——POCO数据模型。没有其他参考资料。
- 。。数据——DbContext, Repository, Unit of Work。参考模型和实体框架。
- 。。WebApi - WebApi项目。参考文献-模型,数据,实体框架。
- 。。MVC - MVC项目。参考文献-模型(可选数据和实体框架).
- 。。测试——测试项目。参考资料-模型,数据(或假数据),测试项目。