0

我正在编写我的第一个 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 的示例。谁能指出我正确的方向?

希望这是有道理的,谢谢!

4

1 回答 1

2

我会为您的应用程序建议一个更简单的模型:将 Web API 和经典 MVC 控制器视为公开存储库信息的两种方式,其中存储库层反映了您的持久存储。您不想让 MVC 控制器调用 Web API - 直接进入存储库。

有许多关于如何在 MVC 应用程序中使用 Web API 的示例,例如,您可以查看 [1]。

亨里克

[1] http://www.asp.net/web-api/samples

于 2012-07-07T06:43:26.277 回答