建議在finally塊中擁有業務邏輯嗎? 工作結束後(無論是否成功),我必須發送電子郵件通知。我可以將電子郵件邏輯放在最終塊中嗎?我可以在Finally塊中擁有業務邏輯嗎?
0
A
回答
1
我能想到的主要危險是finally塊有能力默默吞下異常並從try塊本身返回值。
例如,
try {
doSomethingFancy();
} finally {
sendEmail();
}
如果doSomethingFancy拋出一個異常,你會試圖發送電子郵件。如果以某種方式發送電子郵件失敗,sendEmail可能會拋出異常。這個例外將會「覆蓋」原來拋出的一個,你永遠不會看到它。它會消失。
你可以解決這個代碼防守更try/catch塊,但只是知道......
+0
我已經實現了(幾次)幫助類,它將運行一系列操作,並在特定操作失敗時捕獲異常/繼續。一旦所有動作都被執行,如果有任何異常被拋出,它們將被彙總爲一個主異常,我會拋出異常。 – 2010-08-28 06:01:02
0
你可以做的是,在案件catch塊,如果你打算髮送錯誤條件指定的電子郵件ID。 finally塊通常主要用於資源的優化釋放。我不建議在finally塊中發送電子郵件或執行任何業務規則。
1
理想情況下,您應該在Try塊中擁有業務邏輯,並且最後塊應包含任何清理任務或任何必須發生的事情,而不管try塊的成功或失敗。您還需要確保finally塊中的代碼不會導致任何異常,否則在Steven提到的情況下,原始異常將會丟失(如果有)。
0
在我的腦海裏,
try {
doSomethingFancy();
catch(Exception ex) {
logError(ex);
}
sendMail();
是爲這個完美的模式。最後,塊應該只用於清除try塊中的代碼可能留下的混亂。
相關問題
- 1. 在主管中有邏輯可以嗎?
- 2. 業務邏輯
- 3. 我可以爲我的業務邏輯創建自己的狀態碼嗎?
- 4. Qt GUI和業務邏輯模塊
- 5. 我們可以在Task.Run中有一個while循環邏輯嗎?
- 6. 業務邏輯exception.example
- 7. 業務邏輯類
- 8. ASP.NET業務邏輯
- 9. 我可以使用嵌入式業務邏輯創建高級SQL約束嗎?
- 10. Netty中的業務邏輯?
- 11. Java中的業務邏輯
- 12. Django中的業務邏輯
- 13. PHP:分離業務邏輯和表達邏輯,值得嗎?
- 14. 域邏輯和業務邏輯
- 15. 演示邏輯或業務邏輯?
- 16. 我可以從python的finally塊中得到異常嗎?
- 17. 業務邏輯和服務
- 18. 我可以在我的MySQL Query中使用條件邏輯嗎?
- 19. 是否可以將此業務邏輯放入SQL查詢中?
- 20. 任何人都可以提出設計模式來分離JavaScript中的業務邏輯和表示邏輯嗎?
- 21. 在查詢中複製業務邏輯
- 22. 在.net中使用業務邏輯層
- 23. 在Jsp或業務邏輯中排序?
- 24. 在Microsoft CRM中實現業務邏輯
- 25. 在模型中實現業務邏輯
- 26. 我可以擁有LinkedHashSets的LinkedHashSet嗎?
- 27. RIA服務中的業務邏輯
- 28. 我可以擁有RequireJS模塊的多個實例嗎?
- 29. SQL業務邏輯通緝
- 30. EF6和業務邏輯層
當然,但是當電子郵件失敗時會發生什麼? – leppie 2010-08-28 05:25:39
@leppie這個案子也是我的想法。那麼你在哪裏建議放置電子郵件代碼? 在另一個筆記上,我已經讀過,finally塊總是應該用來清理資源。那麼保留一些業務邏輯真的是一個不好的習慣嗎? – Mayank 2010-08-28 05:32:25