gpt4 book ai didi

apache-flex - 避免 View 模型中的重复数据和计算

转载 作者:行者123 更新时间:2023-12-03 10:50:11 26 4
gpt4 key购买 nike

我正在开发一个使用 MVVM 的 Flex 应用程序。我知道建议在 View 和 View 模型之间进行一对一的映射。如果在多个 View 中需要它,我如何避免执行相同的计算并多次存储相同的数据?

例如,假设我有一个程序可以加载由项目列表组成的项目文件。我的应用程序的主选项卡有一个导出按钮,只有在项目有效时才应该启用它,所以我创建了一个 isExportEnabled主选项卡的 View 模型上的属性。对此的计算涉及通过迭代项目中的每个项目并验证每个项目的某些属性来验证项目。我有另一个选项卡,它有一个“打印项目摘要”按钮,所以这个选项卡的 View 模型有 isPrintEnabled .无论项目是否有效,此标志的值都基于相同的标准。

  • 我可以将确定这些值的逻辑放在它们各自的 View 模型中,但是当加载项目时,我最终会计算两次相同的值。
  • 我可以移动isValid到域模型,但随后模型变得非规范化。如果编辑保存的项目而不更新“isValid”标志怎么办?
  • 我可以为整个项目创建一个全局“项目 View 模型”,计算项目是否有效,然后拥有 isExportEnabledisPrintEnabled委托(delegate)给那个。然而,我最终得到了本文建议避免使用的 View 模型层次结构:Applying the Presentation Model in Flex

  • 感觉没有正确的方法可以做到这一点。

    最佳答案

    所以你是说你有两个基于相同验证功能的用户手势,“导出”和“打印项目摘要”?如果我正确地阅读了您的帖子,那么您可以计算一次并有两个 setter/getter

    private var _isValid:Boolean;
    public function validate():Boolean
    {
    _isValid = //result of calculation
    dispatchEvent( new Event("isValidChange") )
    }
    [Bindable(Event="isValidChange")]
    public function get canExport():Boolean
    {
    return _isValid;
    }
    [Bindable(Event="isValidChange")]
    public function get canPrint():Boolean
    {
    return _isValid;
    }

    现在有些人可能会说,既然它们返回相同的值,我们应该摆脱 getter 并返回一个简单的 [Bindable] 公共(public)值。但由于这似乎是该功能的第一个实现,因此拥有两个独立的功能可以让您在面对不断变化的 UI 和验证要求时保持一定的稳健性。

    就个人而言,如果验证逻辑太重,我会在我的模型“public var isValidProject”上保留该值,因为模型应该知道它是否有效。然后表示层将使用该值来确定如何向用户表示这是一个无效项目(弹出窗口、警报、错误字符串)。

    在其他情况下,我会在这些按钮的演示者上创建一个 setter “set selectedProject”并在那里运行我的验证和/或更改我的按钮启用状态。

    我真的很想听听其他人对此的看法。

    关于apache-flex - 避免 View 模型中的重复数据和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824573/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com