在 MVC 架构中,模型用于存储应用程序中使用的数据。我创建了一个类并使用一些静态属性来存储数据,以便可以在整个应用程序中使用它。例如,如果有一个数据网格,我在模型类中使用一个静态数组集合。每当调用服务时更新它,并通过使用数据绑定更新数据网格的数据提供者。我读过单例类也可以用来完成这个任务。我用于模型类的方式更好还是存在其他方式?
2 回答
正如天神所指的讨论所指出的,一堆静态变量和一个单例之间几乎没有任何区别。两者都可以看作是全局变量的一种形式,具有所有伴随的缺点。我不会在这里争论单身人士有多邪恶。已经有很多关于该主题的文章,您可以在网上轻松找到它们。
但是,我想提出一个替代方案:控制反转(IoC),也称为依赖注入(DI)。我将简要解释这种模式,但您也可以为自己找到大量信息。从您的示例中获取 ArrayCollection;如果您想避免使用静态变量或单例模式,则必须创建一个实例并在整个应用程序中从一个对象到另一个对象传递该实例,甚至可能必须通过一个没有真的需要它,它也不会很干净。
引入了 IoC 容器(对于 Flex 应用程序,它将采用您添加到项目中的库的形式):使用这样的库,您可以在一个地方创建/配置该 ArrayCollection 并让 IoC “注入”该单个实例任何需要它的班级。
一个具体的例子:我们可能有一个像这样的配置文件
<fx:Object>
<s:ArrayCollection id="myLetters">
<fx:String>A</String>
<fx:String>B</String>
</s:ArrayCollection>
</fx:Object>
和这样的课
public class MyClass {
[Inject(id="myLetters")]
public var letters:IList;
}
每当实例化 a 时,IoC 容器就会注入myLetters
ArrayCollection 实例MyClass
。还有很多其他的注入技术,但这个例子只是为了给你一个想法。
在撰写本文时,我相信Parsley是 Flex 使用最广泛的 IoC 容器。
您可以阅读比较Singleton 和 Static的讨论。虽然它是在 C# 中,但类似的面向对象的哲学也适用。
简而言之,Singleton 为您提供了更好的灵活性。如果您为 Flex 应用程序使用 Databinding,则使用 Singleton 将允许您继承 EventDispatcher,您可以使用它来调度自定义更改事件。自定义更改事件将为您的应用程序提供更好的性能。