【问题标题】:pattern best way to connect View to multiple Controllers?模式将视图连接到多个控制器的最佳方式?
【发布时间】:2016-05-16 09:00:05
【问题描述】:

我最近正在使用 C# 中的 MVC 模式执行采购订单程序(不是 ASP.NET Web 应用程序,只是一个桌面程序)。现在的问题是,在 UI 中有很多按钮可以链接到另一个部分,假设从订单页面我可以单击并转到库存页面。当然,每个部分都有自己的一组 MVC。

如何在保持抽象的同时将按钮连接到其他控制器?也就是说,每个视图都不必了解其他控制器的工作原理,或者它需要哪些参数才能工作。

我想到了几种设计可能性,但我不知道哪个更好/更简单:

  • 肮脏的方式:只是将所有需要的控制器的引用放在一个视图中,但这种方式会减少抽象。

  • 共享视图空间:每个按钮都是具有自己控制器的不同视图,但我需要某种视图管理器。

  • 路由:很像 ASP。 NET RedirectToAction,制作一个自定义路由器,使用通用类型(如字符串)来确定要执行哪个控制器和执行哪个操作

  • 每个动作的自定义按钮:对于每个控制器和每个动作,我都为其创建了一个按钮类。然后我需要一种方法让视图为每个按钮提供所需的参数。

有什么建议吗?

【问题讨论】:

  • 为什么你的视图需要引用控制器?如果您的视图只是发出事件,那么任何控制器或控制器都可以监听和响应。
  • 那您如何注册该活动?假设 InventoryButton.Clicked += InventoryControl.ShowList (Inventory Model) 在不知道参考的情况下如何给 InventoryControl.ShowList?这或在控制器 OrderView.InventoryButton.Clicked += ShowList (InventoryModel) 中,视图和控制器必须相互了解
  • 控制器通常依赖于视图并注册构造事件或其他合适的事件。

标签: c# asp.net-mvc design-patterns model-view-controller


【解决方案1】:

我认为你应该为“共享视图”创建一个包含所有按钮及其调用的共享视图,如果这不适合你,那么你可以在他们的控制器中创建一个单独的 WebAPI 调用来获取你的返回日期。

【讨论】:

    【解决方案2】:

    我决定对我的第四个选项进行修改,即创建所有按钮的工厂模式。工厂被赋予所有控制器的引用并相应地初始化所有按钮。

    视图在构建过程中只需要这个工厂,并询问它可以生产的任何按钮。

    这样视图在构造过程中不需要知道任何关于控制器的信息。控制器也根本不需要知道视图。

    感谢大家分享他们的意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多