我们已经有一个包含多个MVC Web项目的解决方案,现在正在添加一个面向客户端的WebApi项目。
API将是通过任何网络项目提供的更为缩小的版本(虽然随着时间的推移它可能会扩展得更多),所以我们来到一个决策点,如何处理模型。
跨不同项目处理模型的最佳做法是什么?
据我所知,WebApi项目中的模型将使用某些对MVC Web应用程序毫无意义的属性属性。而且作为一个例子,Display属性对WebApi毫无意义,但在View中非常有用。
这让我相信我应该为WebApi创建一组单独的模型,但也想知道我是否遗漏了某些东西。
我知道这可能是一个可能导致一系列意见的问题,因此我主要关注的是行业最佳实践。
答案 0 :(得分:6)
在我的Web API和MVC Web应用程序的解决方案中,我有以下结构
模型:我的实体/业务对象。这些是由我的数据库中的Entity框架创建的。这几乎与我的数据库结构相同。我的Repositary方法(用于数据访问)返回单个实例/此类实例的集合。我的数据访问项目是一个单独的类库,已在其他地方引用,如我的web api项目等。
Web API ViewModels :特定于Web API接口/操作方法的Viewmodels(POCO类)。
MVC Web应用程序ViewModels :特定于我的剃刀视图的Viewmodels(POCO类)。 我甚至从Web API Viewmodels 继承了其中的一些,并根据需要添加了其他属性。
答案 1 :(得分:1)
我为DTO使用了一个单独的项目,因此需要使用它们的项目不会遇到循环引用的问题。
我希望WebApi项目将您的模型映射到DTO中。如果您的MVC项目正在使用WebAPI输出,则只需要引用DTO项目。这使您不必直接参考WebAPI项目。