我正在编写我的第一个MVC应用程序,尽管我一直在尝试应用其他答案中给出的指导原则,但项目结构使这变得困难(而且我正在搞一堆东西!)。 目前,应用程序被分成以下层:具有Web API业务层的ASP.Net MVC 3体系结构
域对象/逻辑使用Web服务的API访问。我将此图层视为黑盒,因为某些代码在几个WPF应用程序中使用,并且不在我的控制之下。
存储库层。该层调用Web API服务,并添加到帮助单元测试。它调用服务并返回一个反序列化的域模型。
控制器。根据数据的使用方式,我有两种不同的控制器。
在第一种类型中,控制器调用存储库中的方法,然后使用映射器类将域对象转换为视图模型。映射是手动完成的,因为一些视图模型与底层域对象显着不同。例如:
DomainObject domainObject = m_repository.GetObject(id); ViewModel model = ModelMapper.PopulateViewModel(domainObject); return View(model);
第二种类型旨在提供AJAX调用所使用的数据。在这里,控制器像以前一样调用存储库,但随后使用定制的Json.Net转换器将域模型转换为JSON。 E.g:
var jsonNetResult = new JsonNetResult(); DataObject data = m_repository.GetData(id); jsonNetResult.Converters.Add(new DataObjectConverter()); jsonNetResult.Data = data; return jsonNetResult;
问题:
这感觉就像我做了很多的JSON,域对象和视图模型之间的切换。这似乎没有特别的表现 - 可以/应该存储库创建视图模型而不是控制器?
如果数据旨在作为JSON提供,我将域对象转换为JSON,而不是使用视图模型。这看起来不一致,但我不想为了它而映射到视图模型。这是正确的方法吗?
我可以在实体框架的顶部找到很多使用MVC的示例,但我很努力地找到在MVC应用程序中使用Web API的示例。任何人都可以将我指向正确的方向吗?
希望这是有道理的,谢谢!
我有看那些示例,并且可以看到它们是如何使用Web API和控制器层。但是,Web API层提供了视图所需的内容(与控制器的方式相同),而在编写Web API层的项目中,提供了访问不能密切反映视图结构的业务模型。 我在控制器和Web API之间有一个存储库层的原因更多的是帮助我测试,而不是其他任何东西 - 可能这是命名错误。 – Nemone 2012-07-10 07:03:48