我目前在Visual Studio解决方案中有以下项目
MySiteAPI 正在http:\\localhost\api
正确提供数据,我想在 MySiteMVC 中使用该数据。
MySiteAPI 目前有实体框架代码优先类来处理数据端
我对如何将数据提取到 MySiteMVC 上的类定义感到困惑,因为定义位于 MySiteAPI 项目中,而不是 MySiteMVC 。似乎Web API也不能被称为Web引用来获取类信息,这就是我被困住的地方。
我认为这是一个架构问题,并希望在重组此项目之前确保我理解正确的方法。
我不想将MySiteAPI引用到MySiteMVC中,因为那种分离两个项目的失败。我正试图对此更加强大。
不是将类定义放在 MySiteAPI 项目中,而是应该创建一个类库来处理两个项目引用的数据的实体框架吗?
如果是这样,类库是否只包含类定义,而 MySiteAPI 项目是通过DbContext
进行数据库操作的项目?这似乎是对我最有意义的。
在这种情况下,会有三个项目
MySiteAPI 和 MySiteMVC 都会引用 MySiteModels
这是一种正确的方法吗?有更合适的方式吗?
答案 0 :(得分:2)
是的,你的问题似乎是建筑问题。有许多不同的方法可以为您的问题实现更好的架构(它还取决于您的项目的大小),但我将描述我认为最适合,灵活,可测试的中型项目。
模型在分离的类库项目中定义,例如MyProject.Models
。在这个项目中,只有POCO对WebApi,Mvc或实体框架项目一无所知。它们应该完全分离,并且可以在任何其他项目中使用。
“实体框架项目”或“数据”也在单独的类库项目中定义,例如MyProject.Data
。该项目仅引用实体框架和Models项目。这里定义了派生的DbContext
类。该项目负责连接和操作数据库。如果您使用某些模式,例如Respoistory
或Unit Of Work
模式(我认为这比在任何需要的地方初始化DbContext要好得多),它们也可以放在这个项目中。
WebApi
和Mvc
是两个独立的“客户”项目。两个参考模型项目,WebApi
也引用了数据项目和实体框架。但是两个客户项目彼此都不知道。如果需要,您可以为它们提供瘦(dll)依赖关系并将它们托管在不同的服务器上。如果MVC项目将使用身份进行个人用户身份验证,则应引用其他类似的项目结构(数据,模型,实体框架,分离的DbContext)或使用已定义的项目。
如果您打算测试代码(我推荐它),则会有一个(或多个)测试项目,例如MyProject.Tests
。测试项目参考Models
,Data
(或Data
的假实施)和WebApi
或Mvc
项目取决于测试内容。
对于DbContext,Repository,Unit of Work和其他一些类,应该有很少的接口可以放在不同的类库中,用于公共接口。
让我们总结一下: