2014-11-06 50 views
0

我設計,我們必須在每一個蒙戈文件執行相同的計算一個巨大的應用程序,例如:在Mongoose或MongoDB中將計算和公式放在哪裏?

{ 
    field1:field1, 
    field2:field2 
    sum:(field1+field2) 
} 

如果把這類計算最好的?進入Mongoose Model或Schema,MongoDB本身甚至是成角度的我們的控制器?

回答

0

如果您需要對數據執行查詢或計算複雜,則爲結果添加一個簡單的字段並將其存儲在MongoDB文檔中是有意義的。 MongoDB並不知道某些字段是相關的,這是您保持數據同步的工作。

如果您不需要查詢並且計算不復雜,最好的地方通常是模型,因爲它允許「後端」服務和前端服務查詢字段並且(域)邏輯被編碼進入模型的中心位置,而不是分佈在一半的代碼基礎上。

我只把這樣的邏輯在前端,如果它是一個只讀和前端專用的事情,比如,你可能想通過角過濾進行數字格式,並具有完全執行計算和數據存儲精確。

角度控制器應該只涉及前端邏輯,例如,管理用戶如何從互相排斥或相互依賴的各種選項中進行選擇的順序。前端控制器不應該對域邏輯有絲毫的想法。

+0

感謝您的回覆。 「域邏輯」是什麼意思?我同意你的意見,我正在考慮將財務計算保存到Mongo中並讓模型使用它。此外,用戶將能夠從前端更改這些計算公式。我知道,不是你的日常應用程序。 – nottinhill 2014-11-06 13:31:10

+1

「域邏輯」是即使沒有計算機也需要執行的邏輯,例如「總量是淨乘以1加100以上的稅」。所以函數'getGross(){return net *(1 + tax/100.0); }'是域邏輯,領域模型方法是它不應該坐在控制器,數據庫或前端,而是模型本身。或者,您可以使用執行計算的'TaxCaluclationService'並輸出一個只包含兩個字段的總數和淨值的dto,但不知道它們是相關的。請參閱http://martinfowler.com/eaaCatalog/domainModel.html – mnemosyn 2014-11-06 14:03:51

+0

謝謝@mnemosyn。我同意它應該在模型中或者在API中,如果模型中不可能的話。另請參閱此後續主題,獲取更多技術信息:https://groups.google.com/forum/#!topic/mongoose-users/lzyjg0b8Vn0 – nottinhill 2014-11-06 14:28:23