答覆 關於用異常控制程式流程的看法

2021-08-31 15:44:42 字數 1248 閱讀 2576

[url]

資料庫很強大,它為我們考慮了大多數情況。像資料一致性、多表聯接查詢、排序等等;似乎我們不需要再去考慮更多,把這些問題統統交給資料庫去做就好了。這麼做的好處顯而易見,而且似乎既然資料庫已經提供了如此眾多的特性,我們沒有不用的道理。當然缺點就是資料庫壓力增加了,軟體的大多數壓力都集中到了資料庫。

看起來這似乎不是什麼缺點,而且商用資料庫還能獲得大廠商的技術支援,好處多多。而且壓力大了還可以通過增加集群節點來緩解。領域軟體都是這麼做的,為了安全性。oa、erp、crm等軟體一般也把資料一致性問題交給資料庫處理,因為方便,乙個公司內部使用的軟體,併發量一般不會太大,不需要為吞吐量和響應時間考慮太多。甚至我知道有些架構設計連業務邏輯都交給儲存過程去做了。不過有些時候巴不得把所有事情都交給資料庫去做不見得是個好方法。

最後,既然你在當前這一層就能處理的情況為什麼還要拋異常出去再到上一層處理。就像領導安排你一任務,你遇到的各種情況都跟領導匯報一下但你明明就有能力處理可就是不處理,這樣好嗎?實際上領導只關心你的處理結果。同樣的,你負責的**能處理的問題就處理,把處理結果告知呼叫者就行了,這樣不是能減少呼叫者的麻煩嗎?在軟體工程分工細緻的團隊,這麼做非常有利,**的責任和人的責任都很明確。

本來我舉這個例子是為了說明下分割線上面提到的問題。後來仔細想想,這個例子有些粗糙了。本來是想開帖討論異常和業務狀態碼、錯誤碼的優劣和應該在哪些情況下使用它們。讓我沒想到的是,現在居然變成了如何維護資料一致性、資料表設計方面的討論了。是我說的不清楚還是我的帖太有指向性?

最近一直在加班,等閒下來了再開新帖吧。我得好好組織下文字。

再回答snowm的最後一句。得到了啥和失去了啥都在前面說過了,得到了低資料庫負載和更細緻的分工還有維護業務邏輯的高代價當然還有高水平的程式設計師。失去了資料庫提供的便利。當然我說這些和之前發的帖並不是說一定要怎樣,一定不能怎樣。這類問題沒有絕對對錯。只有適不適用、方不方便、簡單困難和哪個是更優方案。在你看來是扯淡的做法,在我看來恐怕是更合適的,反之亦然。

我們不能純粹為了用什麼而用什麼,而應該考慮更優方案。就像hibernate很多地方用異常做程式流程控制,因為在它遇到的那些場景下可能是最合適的、效率最高的。對基礎框架和類庫來說,對效率的追求無論如何都不過分。當然我說的是更優方案,不是最優。因為只要去想去思考去驗證應該總能找到更加合適的方案。有些時候明明有更優方案我們可能也會棄之不用,因為已有成熟的和熟悉的方案一直在用,我們成了習慣,而採用不熟悉的方案即使它是更優的,我們可能也不敢用,因為採用一種不熟悉的技術,不了解的架構需要承擔更大的風險,在以安全穩定為第一或以完成任務為第一的情況下還是採用保守的方案更好一些,即使方案差一些至少不容易出錯。

C 學習 之 控制程式流程 (筆記)

在一些時候語句需要進行有條件的執行。比如如果輸入 y 就執行賦值語句n 1 否則n 0 includeusing namespace std intmain if條件下一條語句時 可省略,此處給出 else cout if.else是可以巢狀使用的,下面例出乙個模板 if expression1 e...

棧溢位 控制程式的執行流程

include include include define password 1234567 int verify password char password void main fscanf fp,s password valid flag verify password password i...

教你輕鬆給流程增加許可權控制程式

以下是引用片段 通過下面的 產生角色 以下是引用片段 產生角色 private void createroles string personnelrole system.web.security.roles.adduserstoroles users,personnelrole if system....