【问题标题】:What design pattern? I need two modes in my app, edit and view什么设计模式?我的应用程序需要两种模式,编辑和查看
【发布时间】:2009-09-17 03:19:29
【问题描述】:

如果我的应用程序需要两种模式,我会使用哪种设计模式来防止丑陋的条件代码?应用程序目前是 MVC,但我不希望在我的控制器中使用条件代码,并且不希望每个视图有两个控制器,除非我必须这样做。

有什么建议吗?

【问题讨论】:

  • 你能解释一下“两种模式”是什么意思吗?
  • 您不想在控制器中使用条件代码?你会把它放在哪里?条件代码是你生活的一部分,习惯于改进它,而不是避免它:)
  • @JoshJordan:至少在 C# 3.0 中,完全有可能编写整个应用程序而无需使用诸如ifforeachswitch 等普通条件结构。通常不值得费心去彻底清除这些东西,但保持它们可以降低圈复杂度并提高可维护性。
  • @Mark,对于很多语言来说都是如此,是的,但请注意,圈复杂度并没有降低,它只是移动到另一个(通常是预先构建的)层。当且仅当只有一条路径通过您的程序时,您的圈复杂度为 1,这使得应用程序相当无用。

标签: model-view-controller design-patterns puremvc


【解决方案1】:

每个实现都有不同的子类,在公共超类中或使用 Template Method pattern 具有共享功能。

【讨论】:

    【解决方案2】:

    也许是State Pattern

    【讨论】:

      【解决方案3】:

      Abstract Factory,或Proxy。您的控制器将包含某种工厂或代理实例,用于检索“模式”并相应地对其进行操作。

      【讨论】:

        【解决方案4】:

        如果没有更多信息,很难确定,但我会建议策略模式。您可以使用相同的控制器,只需更换策略对象即可产生所需的行为变化。

        这是一篇您可能会觉得有用的文章: http://www.javaworld.com/javaworld/jw-04-2002/jw-0426-designpatterns.html

        【讨论】:

          【解决方案5】:

          看看JSR-168、java portlet及其参考实现,应该和你想要实现的差不多。

          【讨论】:

            【解决方案6】:

            这种决定的适当位置是 MVC 的控制器。我建议你先写在那里。如果它确实是重复的,那么弄清楚如何清理它可能很简单:您可以将条件逻辑移动到基类中,或者根据语言,可以使用某种过滤器来处理它。您还可以为视图创建一些“工厂”,它了解您的应用程序的“模式”。然而,在架构上,所有这些都在控制器中。

            你不希望它出现在视图中是对的。这会很混乱。您可能需要两种版本的视图,一种用于“查看”,一种用于“编辑”。

            最后,这就是控制器的用途。祝你好运!

            【讨论】:

              【解决方案7】:

              在使用 PureMVC 制作的 CafeTownsend 演示中存在类似的情况,其中有两个不同的视图和两个独立的中介。你绝对不需要条件代码。我不知道您使用的是什么技术和编程语言,但在 Flex 中它将是一个 ViewStack,其中 ListView 和 EditView 作为子项:

              在创建视图时按需注册相应的中介。您可以使用上一个链接检查其他实现。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-06-03
                • 2011-01-20
                • 2010-10-03
                • 2021-09-21
                • 1970-01-01
                • 1970-01-01
                • 2012-04-27
                • 1970-01-01
                相关资源
                最近更新 更多