簡體   English   中英

有了Spring / Hibernate,這個簡單的業務邏輯應該怎么做呢?

[英]With Spring / Hibernate, how should this simple business logic be done?

假設我有一個包含兩個實體的簡單項目,Account 和 Transactions,其中 Account 實體具有 id、accountName 和 transactions 等字段,而 Transaction 實體具有 id、description 和 amount 等字段。

我想顯示一個簡單的表格,它是給定年份的賬戶列表和現金流量(即給定年份的交易總和)。 實現這一目標的最佳方法是什么?

一種方法是在 TransactionService 上使用一個方法,如 getCashflow(Account account, int year),但這需要為每個帳戶調用此方法,然后將結果傳遞給與帳戶解除關聯的 model。

看起來最好的方法是在 Account 上使用 getCashflow(int year) 方法,但是如果不使用 TransactionService,如何計算總和呢? 還是應該這樣做? 如何?

我查看了派生屬性,但這不是屬性,因為它是給定年份的結果。

我知道這似乎是一個簡單的問題,但我無法弄清楚教科書的方法是什么。

代碼和代碼效率與您如何設計表(實體)有直接關系。

account表中包含txn ids不是一個好主意。 它將有很多不必要的帳戶表條目。 而在每個 txn 中都有帳戶數據會更好。

看看下面的設計: 在此處輸入圖像描述

在建議的設計中,您可以使用從TransactionService上的getCashflow(int year)調用的SUMGROUP BY編寫數據庫查詢。 您根本不必從getCashflow(int year)中引用Account table ,從而使您的查詢更加高效並使您的數據庫免於冗余。

賬戶有交易,你需要在交易上進行一些操作(總和)的賬戶列表,所以它必須從AccountService調用,方法如getAccountListWithYearlyCashflow(int year)並在該方法中從AccountRepository /datasource 和每個賬戶檢索所有可能的賬戶獲取過濾的transactionList並對其執行求和。 由於TransactionService僅處理事務,因此在那里進行任何操作沒有意義。 希望我能正確理解你的問題:)

正如德克斯特所說,將所有交易 ID 存儲在帳戶 class 中效率低下。交易 class 成為擁有方並使用帳戶 ID 引用帳戶會更好。

然后,使用 TransactionRepository,您可以讓 Spring 為您完成工作,方法是創建一個簡單的查詢來查找給定年份的所有交易,並按帳戶 ID 對其進行分組以查找您的年度現金流量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM