有了好的架構還需要好的**,在編寫**前,我們要區分**的型別,**分兩種:乙個是表達業務邏輯的**,表達業務邏輯的****於現實生活的切分,是對生活的模擬和虛擬化,另一種是對使用者提供訪問並儲存業務邏輯執行結果的**,這裡有乙個值得分析的名詞業務邏輯。
業務邏輯是指的是軟體**中的邏輯,不是現實生活中的邏輯,是除**縮排和計算順序呼叫之外的邏輯,以下用嚴格的順序呼叫來指代這種**。因為順序呼叫是計算機的特性,由編譯器來決定的,當然最本質的是因為我們計算的基礎都是圖靈機。在現實生活中,順序呼叫也是邏輯,大家不要和我們這裡說的業務邏輯相混淆。
service裡面的**嚴格的計算順序呼叫的**不需要做單元測試,也很難做單元測試,因為這些**都需要和很多上下文打交道,所以**只要做連通性測試即可,由於 service **簡單了,才可以讓我們的開發人員投入更多的時間研究業務,畢竟這部分才是軟體所真正服務的物件。business 不訪問任何上下文,不訪問任何具體的裝置,因為其他地方沒有業務邏輯,所以一旦有問題,就可以斷定是 model 的問題,單元測試肯定可以發現。如果單元測試沒有發現問題,那麼單元測試一定有問題。線上問題的模擬也就變得非常的簡單,單元測試也能夠得到進一步的補充。
在實際操作中,不能有邏輯,實際上和很多人的觀念是衝突的,認為這個根本做不到。做到這一點需要很多的學習成本,但是一定可以做得到。當發現做不到的時候,可以斷定是業務的分析出了問題。比如不該合併的合併了,不該計算的計算了。這個問題一定有辦法解決的,做不到都是理由,無非是想早點把自己的工作結束罷了。雖然剛開始會比較困難,一旦把這個觀念變成自覺,開發的質量和效率馬上就能高好幾個級別
剛學習程式設計程式的時候,碰到乙個問題,我們總是想著怎樣實現某個功能,而不是思考整個軟體的架構問題,那時候只是覺得做架構沒什麼意思,還浪費時間,但是這樣的做法只會更加消耗我們的時間成本,做乙個小專案還可以,遇到大專案成本就會指數級增加
參看:架構漫談
軟體體系架構閱讀筆記九
微服務不需要像普通服務那樣成為一種獨立的功能或者獨立的資源。定義中稱,微服務是需要與業務能力相匹配,這種說法完全正確。不幸的是,仍然意味著,如果能力模型粒度的設計是錯誤的,那麼,我們就必須付出很多代價。如果你閱讀了fowler的整篇文章,你會發現,其中的指導建議是非常實用的。在決定將所有元件組合到一...
Hadoop學習筆記(九)HDFS架構分析
巨大的分布式檔案系統 10pb以上,萬個以上節點 執行於普通硬體 檔案多重備份,探測失敗和錯誤恢復 優化批處理 資料暴漏位置,以便計算能夠挪到資料附近 提供高舉和的頻寬 使用者控制項可以位於異構的作業系統中 在整個集群中使用單一的命名空間 資料一致性 寫入一次讀取多次的訪問模型 客戶端只能追加已有的...
九 Mysql邏輯架構
首先mysql是典型的c s架構,即client server架構,伺服器端程式使用的mysqld 不論客戶端程序和伺服器程序是採用哪種方式進行通訊,最後實現的效果都是 客戶端程序向伺服器程序傳送一段文字 sql語句 伺服器程序處理後再向客戶端程序傳送一段文字 處理結果 那伺服器程序對客戶端程序傳送...