Flex 应用程序架构,我如何构建可以被覆盖的组件库

Posted

技术标签:

【中文标题】Flex 应用程序架构,我如何构建可以被覆盖的组件库【英文标题】:Flex app architecture, how can I build component library that can be overridden 【发布时间】:2010-09-22 21:22:37 【问题描述】:

我有一个我们刚刚为客户构建的相当大的 flex 应用程序。现在,老板告诉我,越来越多的客户对这款应用感兴趣。然而,他们的实现需要一些小的调整(不总是!)。

我们使用的是 Cairngorm,据我目前所知,客户端之间唯一不同的是视图。目前,视图位于主 flex 应用程序中,其他所有内容都位于库中。

所以我将视图(mxml 组件)放入库中,以便所有新的客户端实现都可以使用它们。到目前为止,一切都很好。所以现在我创建了一个新的 Flex 应用程序项目,引用我的新 mxml 组件库,将它们添加到主 mxml 应用程序文件中,应用程序运行良好。

但是问题来了,我该如何构建这个东西,以便我可以用客户端特定的组件覆盖“默认”组件中的行为?如果我可以将一个 Mxml 文件添加到我的客户端 Flex 应用程序并且框架知道它应该覆盖默认组件,那就太好了。你可能会说我可以只换掉主应用程序文件中的组件,但我需要换掉任何组件的能力,即使是那些深深嵌套在其他自定义组件中的组件。

在 Asp.net 中,您可以使用“占位符”控件,然后在运行时确定要加载的控件。但我不知道如何在 Flex 中做到这一点。

如何构建这个东西?

【问题讨论】:

【参考方案1】:

您可以通过使用类工厂来解决问题。不是直接创建新组件的实例,而是要求工厂类为您创建组件,并根据某些标准(可能是应用程序中的静态常量值?)工厂将决定从哪个类实例化组件。

Wikipedia 上的文章和代码示例比我能更好地解释它: Factory method pattern(从“封装”标题继续阅读)。

这种方法的两个潜在缺点:

    您将为代码库添加更多架构。以我的经验,工厂模式并不一定会使代码更易于阅读。难以阅读的代码 == 可重复使用的代码较少。 如果您严重依赖 MXML,您可能需要更多的怪癖来从工厂实例化组件。

【讨论】:

【参考方案2】:

无论您要在某处更改对特定类的引用。您可以子类化(使用扩展)组件,然后修改它们的行为,但是您必须更改引用以与子类而不是父类对话。

我只会为您需要扩展功能(扩展含义更改或以任何身份添加)的那些东西创建一个子类,然后使用这些子类代替您使用父类的位置。它的工作量更大,但重用代码最简单、更有机会。

【讨论】:

以上是关于Flex 应用程序架构,我如何构建可以被覆盖的组件库的主要内容,如果未能解决你的问题,请参考以下文章

flex 覆盖公共函数集数据

Flex 应用程序到组件?

Flex 4:构建具有背景的组

Flex 组件和 main.mxml 通信

如何使用flex构建桌面应用程序?

Flex:在哪里可以找到免费的蜘蛛/雷达图组件?