Oop 存储或计算复杂模型的总计

Oop 存储或计算复杂模型的总计,oop,zend-framework,frameworks,data-modeling,Oop,Zend Framework,Frameworks,Data Modeling,全部, 我正在开发一个应用程序,使用Zend框架来管理建筑工程的投标 投标将是一组相当复杂的模型,其架构类似于下面的代码片段 我的问题是。。。我应该将投标的总价值存储为投标模型的一部分,还是应该在每次需要时进行计算?投标总价为所有组成部分的总和(如设备/劳动力/材料/日常开支等) 我不知道zend的具体情况,但一般来说,我建议将计算作为初始策略。仅当出于性能原因需要时才存储它。理由: 在这两种情况下都需要编写计算函数 如果存储(缓存)它,则需要一种检测投标结构更改的策略&更新缓存的值。这是额外的

全部,

我正在开发一个应用程序,使用Zend框架来管理建筑工程的投标

投标将是一组相当复杂的模型,其架构类似于下面的代码片段

我的问题是。。。我应该将投标的总价值存储为投标模型的一部分,还是应该在每次需要时进行计算?投标总价为所有组成部分的总和(如设备/劳动力/材料/日常开支等)


我不知道zend的具体情况,但一般来说,我建议将计算作为初始策略。仅当出于性能原因需要时才存储它。理由:

  • 在这两种情况下都需要编写计算函数
  • 如果存储(缓存)它,则需要一种检测投标结构更改的策略&更新缓存的值。这是额外的复杂性,所以只有在您发现需要时才引入它
  • 您应该能够将实现策略隐藏在接口[
    getTotal()
    ]后面,这样,如果您决定以后缓存,则调用客户端就不必更改


    (当然,上面还有一些警告。如果结构是不可变的,那么您可以安全地缓存,而无需进行更新检测)。

    这对我来说已经足够好了。除非遇到性能问题,否则我会选择计算机。
    object(Application_Model_Tender)#75 (4) {
      ["_id":protected] => int(1)
      ["_name":protected] => string(33) "Tender Name"
      ["_due":protected] => string(10) "2010-12-01"
      ["_labour":protected] => array(2) {
        [0] => object(Application_Model_Gang)#81 (3) {
          ["_id":protected] => int(1)
          ["_name":protected] => string(25) "First Gang Name"
          ["_gangMembers":protected] => array(2) {
            [0] => object(Application_Model_GangMember)#93 (5) {
              ["_id":protected] => NULL
              ["_name":protected] => string(11) "Labour Type"
              ["_workingPattern":protected] => string(7) "Default"
              ["_cost":protected] => float(546)
              ["_qty":protected] => int(3)
            }
            [1] => object(Application_Model_GangMember)#91 (5) {
              ["_id":protected] => NULL
              ["_name":protected] => string(11) "Labour Type"
              ["_workingPattern":protected] => string(8) "Custom 1"
              ["_cost":protected] => float(777)
              ["_qty":protected] => int(1)
            }
          }
        }
        [1] => object(Application_Model_Gang)#90 (3) {
          ["_id":protected] => int(2)
          ["_name":protected] => string(15) "Second Gang Name"
          ["_gangMembers":protected] => array(1) {
            [0] => object(Application_Model_GangMember)#92 (5) {
              ["_id":protected] => NULL
              ["_name":protected] => string(11) "Labour Type"
              ["_workingPattern":protected] => string(8) "Custom 1"
              ["_cost":protected] => float(777)
              ["_qty":protected] => int(2)
            }
          }
        }
      }
    }