Apache flex 大型Flex应用程序的最佳实践? 我正在创建一个相当大的Flex应用程序,随着时间的推移,它开始走向不可维护性。p>

Apache flex 大型Flex应用程序的最佳实践? 我正在创建一个相当大的Flex应用程序,随着时间的推移,它开始走向不可维护性。p>,apache-flex,actionscript,Apache Flex,Actionscript,我正在使用3个外部库项目,它们仍然足够小,可以保持可维护性和可重用性,但是主项目似乎不可能保持组织性 部分问题似乎是我有大约30个对象继承自一个抽象超类类型的对象。所有子对象都有一个逻辑组件和一个ui组件,它们彼此紧密集成。超类对象有大约60个共享方法和属性,其中大部分可以在任何子类中重写,其中一些应该在所有子类中重写 为了增加复杂性,它们必须在它们之间进行通信,这通常是通过它们所在的容器对象实现的。此外,主项目必须从这些对象中创建值对象,以便将它们发送到FluineFX后端进行存储和附加身份验

我正在使用3个外部库项目,它们仍然足够小,可以保持可维护性和可重用性,但是主项目似乎不可能保持组织性

部分问题似乎是我有大约30个对象继承自一个抽象超类类型的对象。所有子对象都有一个逻辑组件和一个ui组件,它们彼此紧密集成。超类对象有大约60个共享方法和属性,其中大部分可以在任何子类中重写,其中一些应该在所有子类中重写

为了增加复杂性,它们必须在它们之间进行通信,这通常是通过它们所在的容器对象实现的。此外,主项目必须从这些对象中创建值对象,以便将它们发送到FluineFX后端进行存储和附加身份验证/授权逻辑

我已经从旧的MS BASIC(预VB)、艾达、VB(3到.NET 1)、C++和C语言中创建了更大的项目,而没有这个问题。(好吧,旧的VB倾向于这个问题,因为UI和逻辑之间有着同样紧密的集成)那么,我有没有遗漏什么,或者我可以实现什么最佳实践呢?(即使这意味着重写整个代码段)


是的,这可能是对话的一个扩展。

您在这个项目中使用过任何框架实现吗?一个框架将有助于提高这种复杂性,并有望消除应用程序逻辑和视图之间的许多依赖关系

我是这个框架的大力倡导者,它实现了mvcs模式,并提供了在整个项目中使用的依赖注入。还有其他人,比如。环顾四周,看看哪一个最适合你的项目


在我看来,你真的需要做一个大的重构,这在如此大的项目中是一个危险的过程。如果你努力维护它,它可能是非常值得的。如果你要重构,一定要重构成一个框架。这可能是给你敲竹杠的地方(英镑对英国人来说))

< P > James Hay的对话启动器是好的,但是对于巨大的应用程序,我需要时间来测试和考虑内存管理中的一些建议。RobotLegs非常棒,但我会担心它会造成“过于单一化”和潜在的内存管理问题(尽管我不得不承认,我从来没有使用过或避免过RobotLegs,因为它使用的是单例)。 如果您考虑IoC和依赖注入(就像robotLegs提供的那样),我建议您看看swiz——我非常喜欢swiz采用的新的“实例方向”。我唯一的问题(在当前的测试版中)是他们有一些清理问题,尽管这些问题很容易解决(查看它们的源代码,任何时候你从舞台上完全移除一个组件,你都必须玩分析游戏,确保一切都得到清理——我们必须创建临时函数来移除changewatchers并销毁“显示列表bean实例”,直到它们修复为止)

我领导的项目有很多你必须担心的潜在问题。我们的ERP应用程序有数千个模块,它在客户端机器上一次运行数小时/天,不断加载和卸载模块。垃圾收集和内存管理过去和现在都是问题所在

至于使用mate、讨厌的carhorn或pureMVC,我们在两年前创建了自己的框架。它借鉴了cairngorm的思想,但总的来说,我的建议是在考虑垃圾收集的同时使用您可以快速学习、理解和教授的任何东西。我们的内部模型和视图类现在使用swiz(用于新开发的模块)这使得可维护性和代码可读性超级平滑

我希望我的唠叨至少有一点帮助。
祝您好运。

看起来您只需要将UI和域组件彻底分离。查看Martin Fowler讨论的和,尤其是

要将这些部分组合在一起,您可能需要使用IoC容器,如。这是一个非侵入性框架,允许您保持层分离


不要让框架妨碍你的工作。我看到过大量滥用PureMVC和Cairngorm等框架的情况,主要是因为以全有或全无的方式应用它们。

FWIW,我们在应用程序套件的某些部分使用PureMVC,我相信这会增加很多不必要的复杂性和间接性。不使用框架的部分似乎更容易易于构建,易于维护。这是一个大型SaaS套件,其中包含大量的应用程序和模块。YMMV。我自己也不是PureMvc的忠实粉丝,但主要是因为它的可测试性。RobotLegs更易于进行单元测试。在有框架和无框架的大型项目中工作过,我肯定看到了使用它的好处尽管如此,尤其是在将来需要维护的时候。我所在部门现在从事的所有项目都订阅某种框架,因此我们有一个标准实现,可以更轻松地从一个项目跳到另一个项目。我实际上没有使用框架,在研究完这一点后,它可能是一个很好的框架粘连。Thanks@jeremy.mooer-RobotLegs实际上不使用单例,所以“过度单例化”的观点实际上是不正确的。它实际上是非常可单元测试的,比Pmvc更容易测试。@James Hay-是的,就像我说的,从来没有用过它来澄清问题。我可能应该以后再下载源代码。我绝对会使用纯文本用于具有openFlux类或flex4类体系结构的模型/控制器的ol类+Carh上的机器人腿