我正在编写我的第一个 MVC 应用程序,虽然我一直在尝试应用其他答案中给出的指导方针,但项目的结构使这变得困难(而且我把事情弄得一团糟!)。目前,应用程序分为以下几层:
使用 Web API 服务访问的域对象/逻辑。我将此层视为黑匣子,因为某些代码在多个 WPF 应用程序中使用并且不受我的控制。
存储层。该层调用 Web API 服务,并被添加以帮助单元测试。它调用服务并返回一个反序列化的域模型。
控制器。 根据数据的使用方式,我有两种不同风格的控制器。
在第一种类型中,控制器调用存储库中的方法,然后使用映射器类将域对象转换为视图模型。映射是手动完成的,因为某些视图模型与底层域对象有很大不同。例如:
DomainObject domainObject = m_repository.GetObject(id); ViewModel model = ModelMapper.PopulateViewModel(domainObject); return View(model);
第二种类型旨在提供 AJAX 调用使用的数据。在这里,控制器像以前一样调用存储库,但随后使用自定义 Json.Net 转换器将域模型转换为 JSON。例如:
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 的示例。谁能指出我正确的方向?
希望这是有道理的,谢谢!