一个好的设计应当具备哪些要素
生活随笔
收集整理的這篇文章主要介紹了
一个好的设计应当具备哪些要素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于一個好的設計,我們往往會說其應當具備可維護性,這是最為基本的要求。其它的要求,比如性能、資源的占用等都應當在滿足可維護性的情況下再去考慮的。但可維護性是一個非?;\統的詞,可以說一個詞包含了很多的東西,比如,可讀性、可擴展性等等,都可以當作是可維護性的內容。我在日常工作中,對于一個好的設計,有一些自己的想法,主要是體現在“四性一痛”。 第一,一個好的設計應當具有“一致性”。一致性就是對于相類似的問題采用同樣的方法去處理,而不是對于類似的情況,在case1中采用的是設計A,而在case2中采用的是設計B。對于這種設計,其往往很難維護。需要說明的一點是,一致性可以包括設計方法的一致性、函數命名的一致性、注釋書寫格式的一致性等等。在一致性上一個好的例子是:UNIX/LINUX中對于文件和設備的處理都是采用open()/close()/ioctl()/read()/write()這五個函數來實現的,當我們在UNIX/LINUX上編程時,只要說到打開設備或是文件,我們就知道應當如何做了。再來看看一致性不好的一個例子:比如CLIB中的malloc()/free(),這是一對用于分配和釋放內存(Heap)的函數,在函數的命名上應當說其一致性并不好,在我看來malloc()/mfree()就要比它好些,不同之處就是在free()函數名的前面加了一個m。一致性好的軟件,不論是維護或是閱讀都讓人覺得舒服和自然,這一點是非常重要的! 第二,一個好的設計應當具有“完整性”。打一個比方,比如我們的程序需要寫一個模塊用于管理某種類型的資源,因此,我們寫了一個allocate()函數用于對這一資源進行分配。從完整性的角度來看有allocate()就應當有free()或是release()。因此,我們的設計應當包含free()或是release()。完整性好的設計往往給模塊的使用者帶來某種程度的靈活性和便利性。 第三,模塊之間的“正交性”。正交性體現在模塊之間不應當存在功能重疊的部分,對于模塊之間存在重疊的部分,往往表明我們需要抽象出另一個模塊,從而將重疊的部分轉移到這一新模塊中。 第四,設計的“簡單性”。這里的簡單不是指我們考慮欠缺,而是指在我們將問題考慮周全后,找出一種簡單的設計和實現方法。簡單性包括代碼邏輯的簡單性和代碼語句的簡單性。簡單意味著容易維護、理解,簡單本身就是一種美!
最后,我想對于一個好的設計,作者可以問問自己:我在設計這個模塊時“痛苦”過了嗎?如果沒有,那存在兩種可能;一是問題很簡單或是我們自己的水平很高,所以不需要更多的思考去實現它;另一種可能就是這一設計有可能是一個“頭痛治頭,腳痛治腳”的設計。好的設計,我們往往需要在很多方面進行權衡,在設計初期是非常痛苦的一件事,但隨著設計的完善,我們會發現“這一設計就是我想要的、就應當是這個樣子的”,到時自己會覺得這個設計很舒服,真的體現了“苦盡甘來”。 對于上面所提到的一些好的設計的特點,在我們的工作中可能不是一次性設計到位的,但是我們必須將這些特點記在心中,并隨著工作的進展最后實現它們。
最后,我想對于一個好的設計,作者可以問問自己:我在設計這個模塊時“痛苦”過了嗎?如果沒有,那存在兩種可能;一是問題很簡單或是我們自己的水平很高,所以不需要更多的思考去實現它;另一種可能就是這一設計有可能是一個“頭痛治頭,腳痛治腳”的設計。好的設計,我們往往需要在很多方面進行權衡,在設計初期是非常痛苦的一件事,但隨著設計的完善,我們會發現“這一設計就是我想要的、就應當是這個樣子的”,到時自己會覺得這個設計很舒服,真的體現了“苦盡甘來”。 對于上面所提到的一些好的設計的特點,在我們的工作中可能不是一次性設計到位的,但是我們必須將這些特點記在心中,并隨著工作的進展最后實現它們。
總結
以上是生活随笔為你收集整理的一个好的设计应当具备哪些要素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 090620 刚才修复一个fat32分区
- 下一篇: 自动发现网络拓扑,一站式点击完成