使用Web API和类信息

时间:2014-08-24 02:58:01

标签: c# asp.net-mvc entity-framework asp.net-web-api

我目前在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

MySiteAPI MySiteMVC 都会引用 MySiteModels

这是一种正确的方法吗?有更合适的方式吗?

1 个答案:

答案 0 :(得分:2)

是的,你的问题似乎是建筑问题。有许多不同的方法可以为您的问题实现更好的架构(它还取决于您的项目的大小),但我将描述我认为最适合,灵活,可测试的中型项目。

模型在分离的类库项目中定义,例如MyProject.Models。在这个项目中,只有POCO对WebApi,Mvc或实体框架项目一无所知。它们应该完全分离,并且可以在任何其他项目中使用。

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

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

如果您打算测试代码(我推荐它),则会有一个(或多个)测试项目,例如MyProject.Tests。测试项目参考ModelsData(或Data的假实施)和WebApiMvc项目取决于测试内容。

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

让我们总结一下:

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