認識抽象的陷阱 過度設計

2021-10-06 10:01:10 字數 1849 閱讀 3237

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

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

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

歷經這麼多年,脫離區域性的思想,拋開**。往著巨集觀方向,系統層的思考。反而得到了一些答案。

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

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

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

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

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

兩個方面:

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

1、可以減少元素

這個是非常常見的。利用抽象類、抽象介面等等

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

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

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

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

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

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

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

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

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

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

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

1、petril網路

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

2、複雜網路 

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

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

龔浩華月牙寂道長

2023年05月23日16:09:28

抽象類的認識

在多型中父類方法的方法體是多餘的,所以就出現了抽象方法,有因為類中只要含有抽象方法則該型別必須為抽象類,abstract修飾的類為抽象類,修飾的方法叫做抽象方法。抽象方法只有宣告部分,而沒有具體的方法體。乙個abstract類只關心他的子類是否具有某種功能,並不關心其自身功能的具體行為,功能的具體行...

UI設計中的過度釋放

昨天在做相簿的時候遇到了乙個問題,系統沒有報錯,但在執行後總是crash,來回找錯好幾次也沒有發現錯誤,後來才發現是記憶體管理出了問題.在viewcontroller中,我宣告了乙個 uipagecontrol page 的屬性,但是在實現的時候,一時粗心大意我將 self page uipagec...

聊聊CORS的過度設計缺陷

注 本文不講cors原理,且預設你已了解cors,但對其中一些細節抱有同樣的懷疑瀏覽器的同源策略自其誕生以來就一直存在,如何進行跨域hack,一代又一代的前後端都為此費盡了心機。首先可以肯定的是,同源策略的限制是合理的。因為,服務端後台介面就部署在那,任何人只要構造了乙個正確的http請求,都能得到...