【问题标题】:ASP.Net MVC 3 architecture with Web API business layer带有 Web API 业务层的 ASP.Net MVC 3 架构
【发布时间】:2012-07-06 08:18:54
【问题描述】:

我正在编写我的第一个 MVC 应用程序,虽然我一直在尝试应用其他答案中给出的指导方针,但项目的结构使这变得困难(而且我把事情弄得一团糟! )。 目前,应用分为以下几层:

  • 使用 Web API 服务访问的域对象/逻辑。我将此层视为黑盒,因为某些代码在多个 WPF 应用程序中使用并且不受我的控制.

  • Repository 层。 该层调用 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 的示例。谁能指出我正确的方向?

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

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

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

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

    亨里克

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

    【讨论】:

    • 我查看了这些示例,并且可以看到它们是如何使用 Web API 和控制器层的。但是,Web API 层提供了视图需要的东西(以与控制器相同的方式),而在我正在编写的项目中,Web API 层提供了对不密切反映视图结构的业务模型的访问.我在控制器和 Web API 之间有一个存储库层的原因是为了帮助我的测试而不是其他任何东西——可能这个名字不好。
    猜你喜欢
    • 2014-06-01
    • 2017-01-10
    • 2019-04-17
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多