我有一个相当大的灵活应用程序,我们刚刚为客户端构建。现在,老板告诉我,更多客户对该应用程序感兴趣。但是,他们的实现需要一些小的调整(不要总是!)。
我们正在使用Cairngorm,据我所知,到目前为止,客户之间唯一不同的是观点。目前,视图位于主要的flex应用程序中,其他所有内容都存在于库中。
所以我接受了视图(mxml组件)并将它们放在库中,以便所有新的客户端实现都可以使用它们。到现在为止还挺好。所以现在我创建一个新的Flex应用程序项目,引用我的新mxml组件库,将它们添加到主mxml应用程序文件中,该应用程序运行良好。
但问题是,我如何构建这个东西,以便我可以使用特定于客户端的组件覆盖“默认”组件中的行为?如果我可以将Mxml文件添加到我的客户端Flex应用程序并且框架知道它应该覆盖默认组件,那将是多么美妙。您可能会说我可以在主应用程序文件中交换组件,但我需要能够交换任何组件,甚至是那些深度嵌套在其他自定义组件中的组件。
在Asp.net中,您可以使用“占位符”控件,然后在运行时确定要加载的控件。但我不知道如何在Flex中做到这一点。
如何构建这个东西?
答案 0 :(得分:1)
您可以使用类工厂解决问题。您可以要求工厂类为您创建组件,而不是直接创建新组件的实例,并根据某些条件(可能是Application中的静态常量值?),工厂将决定从哪个类实例化组件。
维基百科上的文章和代码示例比以往更好地解释了它: Factory method pattern(从“封装”标题中读取)。
这种方法有两个潜在的缺点:
答案 1 :(得分:0)
无论你要在某个地方改变对特定类的引用。您可以子类化(使用extends)组件然后修改它们的行为,但是您必须更改引用以与子类而不是父类进行通信。
我只是为那些你需要扩展功能的东西创建一个子类(扩展意义改变或以任何身份添加),然后使用这些子类代替你使用父类的地方。它的工作量更大,但重用代码的机会最简单,也更容易。