你会发现,在软件开发中没有灵丹妙药:你可以用面向对象的语言开发一个很难维护的应用,然而就像你用过程化语言开发一个应用那样很容易的由于自身庞大的开销而崩溃。但是如果你对面向对象的思想了解的比较深刻的话,你可以开发出非常成功的软件开发项目。
因为ActionScript3是一个完全面向对象的语言,它可以为开发者更容易的理解面向对象的概念,也可以让开发者容易的了解他们是如何在Flex开发中被应用的。
面向对象思想常常由模块化、封装、继承、多态这些技术来支持的。
模块化:
模块化是指一个应用应该分成若干小的任务或模块来完成。例如:一个从用户那里收集资料的应用应该分成若干个模块,每个模块都有一个特殊的用途。显示数据实体形式的代码和收集后来处理这些数据的代码应该写在不同的分开的模块中。这样做可以保持代码的高度可维护性和强健性,这样在某个模块的改动不会神不知鬼不觉的影响其他模块的行为。
跟模块化相反的是单片机模式。在单片机模式中,所有个代码和行为都是定义在一个单独的源代码中的。这些应用导致了易崩溃性,这意味着在某一部分应用中的改变会对其他区域的功能带来毁灭性的影响。这种应用有时候被称为意大利面条,因为他们容易有很多不同目的的代码相互缠绕。
程序:
一个单片机式的Flex应用:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx=“library://ns.adobe.com/flex/mx”>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var myData:ArrayCollection;
]]>
<fx:Script>
<s:VGroup>
<mx:DataGrid dataProvider="{myData}">
<mx:columns>
<mx:DataGridColumn/>
<mx:DataGridColumn/>
<mx:DataGridColumn/>
</mx:columns>
</mx:DataGrid>
<mx:Form>
<mx:FormItem label="First Name:">
<s:TextInput id="fnameInput"/>
<mx:FormItem>
<mx:FormItem label="Last name">
<s:TextInput id="lnameInput"/>
</mx:FormItem>
<mx:FormItem label="Address:">
<s:TextInput id="addressInput"/>
</mx:FormItem>
</mx:Form>
</s:VGroup:>
</s:Application>
在上面的这个应用中,所有的应用函数都混在一起:数据建模、数据采集和逻辑处理。虽然这个应用可能可以正常运行,这样会使得没有错误的改动将会很难!特别是多开发者协作的团队,一起开发应用却不影响别人的工作将是很难做到的。
在下面的例子中我们将一个应用分散在了不同的模块中,每一个都控制整个应用要求的一部分。这个结构容易维护,这样程序员就可以立刻知道为了某个特别的需求需要哪一个模块做更改。
程序:
一个模块化的Flex应用:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:valueObjects="valueObjects.*"
xmlns:views="views.*"
xmlns:forms="forms.*">
<fx:Script source="scriptFunctions.as"/>
<valueObjects:AValueObject id="vo"/>
<views:ADataGrid id="grid"/>
<forms:Aform id="form"/>
</s:Application>
Flex通过使用MXML组件和ActionScript类一起实现模块化思想中大所属的功能。
封装:
未完,待续。。。