我应该如何在ActionScript 3中构建复杂对象的数据?

时间:2010-01-08 18:28:59

标签: actionscript data-structures oop

我希望这不是太模糊,但我坚持一个让我处于不幸状态的问题。

我是Flash开发人员与AS3一起玩弄我正在尝试为客户构建室内装饰工具。到目前为止,我的想法是:创建基本的用户界面,让屏幕流下来,最后使用几个简单的数组来存储用户选择和类似的内容。

当然,我的'几个简单数组'完全不足以模拟我的程序必须考虑的许多用户决策。因此,我发现自己试图创建一个巨大的多维数组,其中有几层嵌套,并且在Panic开始之前。

以下是我对伪ActionScript中应用程序的“床上用品”组件的思考示例:

bedding['size']   = 'king':String
bedding['cover']  = cover:Array

    cover['type']           = 'coverlet':String
    cover['style']          = 'style_one':String
    cover['variation']      = 'varation_one':String
    cover['fabric']         = fabrics:Array

        fabrics[0] = 'paisely':String
        fabrics[1] = 'argyle':String
        fabrics[2] = 'plaid':String

    cover['trim']          = trim:Array

        trims[0] = trim_pair:Array

            trim_pair['type']  = 'trim_one':String
            trim_pair['color'] = 'blue':String

        trims[1] = trim_pair:String
        trims[2] = trim_pair:String

    cover['embellishments'] = embellishment_pair:Array
        embellishment_pair['type'] = 'monogram':String
        embellishment_pair['letters'] = 'TL':String

...请记住,这只是床上用品的一小部分,还有其他几种阵列会进入房间,如地板,墙壁和房间......所有这些都同样复杂。我需要经常访问不同的组合,例如,床上用品中有多少选项没有关联价值等等。

所以,我意识到我已经离开了我的联盟而且会受到伤害,但是我想尝试做到这一点,以便我变得更好,你们能提供的任何帮助都很棒。

我的问题是:

1)使用像这样的嵌套数组实际上并不是一件坏事,我应该坚持下去吗?这会让我感到惊讶,但我想确保我还没有走上正确的道路。

2)如果没有,如果我想这样做,我该从哪里出发?

在我的头顶上,我觉得我可能会把所有课程都打造成课程。所以我的床单是一个类,床有床单和房间有床的实例...等。它认为这将是复杂的,但可能是要走的路。

或者,我可以使用XML路由并将所有房间选项存储在嵌套的空白XML节点中,然后用户在应用程序中移动时会填充这些空间。

这些是我的想法,但我想听听更多有经验的社区成员所说的话。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

我的建议是使用强类型模型。研究使用集合和值对象来存储和检索数据。集合可以是包装Array的类,并提供一个干净的接口来获取它存储的值对象。值对象是表示可以以各种方式组装以创建更复杂集合的数据的简单对象。还可以传递值对象以将数据传输到应用程序的各个部分。使用集合和值对象的优点是,与使用动态方法相比,您的代码(可能)更明确,更容易阅读。对于一些人来说,这种方法的缺点是你最终会有太多的课程。就个人而言,我更喜欢使用许多中小型课程而不是单片课程。

如果您不熟悉价值对象的概念:http://en.wikipedia.org/wiki/Data_transfer_object

答案 1 :(得分:0)

AFAIK,AS3不太适合您尝试创建的复杂数据模型类型。

您需要将UI / Flash层与“库存”系统完全分离。 UI应该是完全抽象的,不了解或耦合到您的数据模式或内容。这可以通过中间层Web服务风格的系统来完成,该系统处理搜索/检索/更新数据的所有业务逻辑。

存储UI所需的所有内容,以处理产品元数据中的演示文稿端呈现。这将允许您添加新产品和类型,而无需在每次引入新产品时更新UI。例如,如果产品附带图像,则使用产品记录将URI存储到图像并按需加载。您可以将此扩展到自定义动画,我相信 - 只需引用外部.SWF文件并根据请求将其加载到您的应用程序中。