認識抽象的陷阱-過度設計

原文鏈接:https://mp.weixin.qq.com/s/o-P9EUMPbAZlTwbykBioPQ

提到過度設計,大概很多人都知道。但怎麼樣界定過度設計,確是很難說的清楚。

 

就是因爲難以界定,所以就出現了可意會不可言傳的意味。彷彿成爲了一種非常高深的傳統文化。

 

那麼怎麼界定呢?要界定,那麼就應該要有衡量的標準。找到這個衡量標準,而且是可以描述的,可量化的,可理解的。

 

歷經這麼多年,脫離局部的思想,拋開代碼。往着宏觀方向,系統層的思考。反而得到了一些答案。

 

那麼再來思考一個問題。在做抽象的時候,或者在利用一些設計模式的時候(其實這也是一種抽象,只不過是利用前人總結好的抽象)。目的是爲了什麼?

 

在我的上一篇文章中 《系統架構設計的一點思考》提到了系統複雜度的概念與描述。

 

那麼抽象的目的是什麼?本質上來說是爲了減少複雜度。

 

認識這個目的之後,一個衡量的標準就是,目前所做的抽象(使用設計模式、領域、分層隔離等)是不是將複雜度降低了?或者使用了某個抽象之後,反而是增加複雜度了。

 

很多人之所以會有着喜歡用設計模式,有一個思維是在於,我手中有一把錘子,看見什麼都想去錘下。這種的是在於,從自身主觀思維出發,只看到局部,而未見整體的系統結構。

 

評判的標準界定,我認爲是應該是從系統的角度,去做評判纔是正確的。這個評判不是以個人主觀意識出發的。而是這個系統,在用了某個抽象之後。

 

兩個方面:

總結爲在現有的架構下,從兩個方向去解決:1、減少元素,元素少了是不是複雜度就少了?2、減少元素之間的聯繫。領域的方案,其實就是採用了這種方式去將複雜度降低。

龔浩華,公衆號:月牙寂道長系統架構設計的一點思考

 

1、可以減少元素

    這個是非常常見的。利用抽象類、抽象接口等等

2、可以減少元素之間的聯繫。

    這個也是非常常見的。利用分層隔離,領域隔離等等

    隔離,封裝的好處,會降低聯繫。也會將部分的完整邏輯封裝成黑盒。其往外暴露的聯繫、邏輯就很少。

 

但並不是說,所有所做的抽象,都是全部往好的一面。有時候也會出現矛盾的地方:

抽象了元素,實現了減少元素。但聯繫確增加了,使得複雜度增加了。

分層隔離做了,但元素確增多了。

 

但總體而言,這個並不是一個純粹的線性描述。但結果是純粹的,複雜度。

如果優化複雜度,也許存在最優解。但更多的,現實中,還存在很多其他的因素。我們尋找的其實是一個增加了更多因素考慮的局部最優解。比如,我們要考慮項目的緊急度,成本等。

 

 

若在此基礎上,再往上一層去思考。就像我們從地球上坐飛船,慢慢的離開地球,我們從最初的大地,看到海洋,再看到一個球,看到月球圍繞地球。再慢慢的離開,我們離開太陽系,再繼續,我們看到銀河系。

 

隨着我們的視角的逐漸上升,映入眼簾的是什麼?系統架構映入眼簾的是一個網絡。一個網絡的複雜度,應該有哪些來描述?

 

目前我所能瞭解到的一些方向:

 

1、petril網絡

Petri網是Carl Adam Petri於1962年在博士論文中首次提出來的。作爲描述系統元素的異步併發操作的工作模型,Petri網在計算機等許多領域都獲得了廣泛的應用。Petri網是完全從過程的角度出發爲複雜系統的描述與分析設計提供的一種有效的建模工具,能自然的描述併發、衝突、同步、資源爭用等系統特性,並帶有執行控制機制,同時還具備形式化步驟及數學圖論相支持的理論嚴密性。值得一提的是Petri網的圖形表達的直觀性和便於編程實現的技術特點,使得它已經成爲工作流及作業流建模的主要工具之一。本小節將使用Petri網作爲作業流建模的工具,對網絡自動攻擊系統上的網絡攻擊作業流進行建模。首先將對Petri網的相關概念進行介紹。

 

 

2、複雜網絡 

複雜網絡(Complex Network),是指具有自組織、自相似、吸引子、小世界、無標度中部分或全部性質的網絡。特徵:小世界、集羣即集聚程度的概念、冪律的度分佈概念。    

 

具體專業化細節,可以自行了解。

 

 

 

龔浩華

月牙寂道長

qq:29185807

2020年05月23日16:09:28
 

 

如果你覺得本文對你有幫助,可以轉到你的朋友圈,讓更多人一起學習。

第一時間獲取文章,可以關注本人公衆號:月牙寂道長,也可以掃碼關注