【问题标题】:Separate projects for MVC5 and Web API 2MVC5 和 Web API 2 的单独项目
【发布时间】:2014-01-20 20:20:06
【问题描述】:

我是 MVCWeb API 的新手。我创建了两个独立的项目。一个 ASP.NET MVC 5 (MyUI) 和其他 ASP.NET Web API 2 (MyApi)。我想将我的 API 项目与我的 UI 层分开。

MVC 项目 (MyUI) 中的 AccountController 类本质上与 API 项目中的 AccountController (MyApi) 所做的相同。我首先考虑让 MyUI.AccountController 成为 MyApi.AccountController 的子类,但后来我很快意识到首先从 Controller 继承,然后从 ApiController 类型继承。

所以我的问题是:

  1. 为了从 MVC 5 项目中删除数据访问逻辑,我应该 只需将 AccountController 转换为一个包装类,它将 本质上是从 MyApi.AccountController?
  2. 有更好的方法吗?

编辑:

编辑 2: 在试图阐明问题时,我意识到我做错了。我的困惑来自嵌入在 API 项目中的 ASP.NET Identity 实现。这需要移到数据访问层,并且两个控制器都需要以相同的方式访问它们,这是完全不同的蠕虫罐头:)

谢谢!!

【问题讨论】:

  • data 模型和 view 模型是有区别的。你的 UI 项目应该包含它工作所必需的模型,从你的 WebAPI 提供的数据模型中获取数据。在哪里转换数据取决于您,控制器或视图模型。就个人而言,我将这种转换放在我的视图模型中的公共方法中
  • 感谢您的回复。我仍然不清楚我的 MyUI.AccountController 将如何与 MyAPI.AccountController 对话,特别是对于 ASP.NET Identity 例程。

标签: c# asp.net data-access-layer asp.net-mvc-5 separation-of-concerns


【解决方案1】:

方法 1 似乎是一个合理的解决方案,但我建议创建一个新的类库并在那里放置您的数据逻辑。这样,MVC 项目和 Web Api 项目就可以连接到该类库。 原因是您永远不知道您是否编写了另一个 UI 层、Service 层或其他连接层。然后所有这些层都可以连接到同一个数据逻辑层。

【讨论】:

    【解决方案2】:

    将通用实现提取到单独的项目(例如类库)中。无论您如何访问它,您的业务逻辑都必须相同。毕竟,Web 服务和站点只是相同信息和相同控制逻辑的视图。将来您可能需要在 WPF 中编写 fat 客户端或在 WCF 中编写服务,并且您不想重写所有内容,是吗?

    【讨论】:

    • 正确。我已经在一个单独的项目中拥有了我的数据层。我实现了 IoC 模式,因此 MyAPI 不了解数据访问逻辑,而只是调用数据层项目中的方法。我的最终目标是单独托管我的 API,以便它可以在外部使用,而不是绑定到我的 UI。在某些时候,当我更精通 Knockout.js 时,我希望将 UI 转换为仅使用 Knockout 并且没有(或最少)服务器端代码。我想这是一个崇高的梦想。
    【解决方案3】:

    我认为您是在询问分层应用程序。基本上选择取决于要求。如果您遵循以数据为中心的设计,请检查此分层

    DI、ORM、Repository Pattern、SOLID原则研究

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2019-07-11
      • 2020-06-03
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多