【问题标题】:Opposite code behind in FlexFlex 中的相反代码
【发布时间】:2011-09-05 05:50:03
【问题描述】:

为什么在 Flex 中,代码隐藏模式使用 Actionscript 类作为基类,而不是为此使用 MXML 组件?
我的意思是,为什么我们不在一个新的 AS3 类中扩展我们的 MXML,而不是在类后面扩展我们的 AS3 代码?

使用这种方法似乎更自然,因为它是一个真正的扩展,我们正在向我们的 MXML 库添加代码和功能。
使用代码背后的模式是对 OOP 的一种破解,每次我们向 MXML 中添加组件时,我们都需要修改我们的 AS3 类,也就是说,如果我们修改子 (MXML),我们也需要修改父 (AS3)。

后面的代码有什么问题(“前面的代码”?)?

【问题讨论】:

    标签: apache-flex code-behind


    【解决方案1】:

    这就是 Adob​​e 决定重新设计其组件架构并创建 Spark 组件集和相应的皮肤机制的原因。

    在这个新的(-ish)理念中,您创建了一个扩展 SkinnableComponent 或 SkinnableContainer 的 ActionScript 类,您可以在其中描述组件的行为。然后,您可以在 MXML 中创建一个外观类,该类定义您的组件的外观(可能还有一些视觉行为,但不是组件的基本行为)。

    这允许清晰地分离关注点。它不是代码隐藏的对立面,但它是一种不同的方法,一旦你掌握了它,它就会非常有效。

    【讨论】:

    • 是的,但为什么 Adob​​e 建议使用后面的代码而不是“前面的代码”?以及为什么没有人使用这种方法(至少我在任何教程/指南中都没有看到)。我的意思是,为什么“前面的代码”模式不存在?它出什么问题了?我没有使用后面的代码,我想我也不会使用“前面的代码”,但我很好奇为什么没有人提出它像一个解决方案(甚至比后面的代码更好)。
    • 在我看来,无论您是在后面还是前面编写代码,这两个类都是紧密耦合的。使用这两种方法的唯一原因是将 MXML 代码与 AS 代码分开。这与关注点分离无关,它只是让你的类更具可读性。
    • 是的,但是前面的代码是真正的扩展,后面的代码不是。我们有一个纯视图类 MXML 和一个扩展该 MXML 的纯 AS3 类,因此,这两个类都是可用的,如果没有您的 MXML,您的 AS3 类(基础)后面的代码将无用,并且如果您在孩子中更改某些内容( MXML)你也需要改变你的父母(AS3)!也许我解释得不好,但我认为选择后面的代码而不是前面的代码一定是有原因的,这不是任意的,是一种设计模式。前面的代码肯定有问题/缺点,但是我看不出来。
    • 我认为我发现“前面的代码”的一个缺点,后面的代码可以在 MXML 中使用绑定,前面的代码不能,因为你的 vars/functions 在 AS3 和你的MXML 不知道。也许这就是为什么“前面的代码”从未像 Flex 中的解决方案那样被提出的原因。
    • 好收获。这就是为什么 - 在我走上 Spark 之路之前 - 我曾经为每个 mxml 组件创建一个单独的“表示模型”和“控制器”类,而不是使用后面或前面的代码。
    【解决方案2】:

    背后的代码受欢迎的主要原因是工具。您只是不能在 Flex Builder 3 设计环境中拖动基于 AS3 的组件。我尝试了各种解决方法,但它们都有问题。事实上,这是我写博客的第一件事: http://www.rogue-development.com/blog2/2007/03/code-in-front/

    我没有在 Flash Builder 4 中重新尝试过。主要是因为从那时起,我意识到 flex 布局工具是垃圾,我很少使用它。因此,我最近的所有开发都是代码在前的。

    如果您需要绑定到 MXML 中的变量,您可以在 MXML 中定义该变量,然后可以通过子类中的继承来使用它。

    我不喜欢单皮肤组件的火花皮肤。如果您的组件具有完全相同的视觉外观,则前面的代码更容易开发。 (皮肤非常适合需要多个皮肤的组件)

    【讨论】:

    • 哇!谢谢马克,我现在并不孤单:)。设计视图也是一个额外的问题,我不知道(反正我也没有在 FB4 中测试过)。 Bue 我认为最重要的是绑定,如果您需要在 MXML 中定义变量来绑定它们,那么如果您需要绑定一些,则需要将 AS 添加到您的 MXML(这是我们试图避免的)更多吸气剂。我认为这两个原因足以证明代码行为的存在,以及不使用前面的代码。如果你想要前面的代码,使用 meadiators,是一个更好的模式(我正在使用它,但我很好奇为什么 adobe 提出后面的代码)。
    【解决方案3】:

    “前面的代码”是一种更自然的扩展和 OOP 设计,因为我们正在扩展我们的 MXML 与 AS3 中的功能,并且我们不需要每次改变我们的孩子时都改变我们的父母。

    但它有一个问题,我们不能在 MXML 中使用绑定,因为现在我们的 MXML 是我们的基类,并且我们在 AS3 子类中有我们的变量/函数。


    编辑: 前面代码的另一个问题是您在设计模式下看不到“AS3 组件”(未在 FB4+ 中测试过,也许现在可以工作)。有关这方面的更多信息,请阅读 Marc Hughes 的回复。

    【讨论】:

      【解决方案4】:

      我认为这是因为继承自 Flash 时代的遗留组件架构,您可以在其中拖入一个黑盒组件,最多在颜色/形状/字体级别上调整一下皮肤,而不是(不能)触摸它是如何工作的。

      【讨论】:

        猜你喜欢
        • 2010-12-05
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多