有關軟件模塊化設計的思考

 對軟件設計來說,我傾向於讓一個系統中的各個子模塊滿足高內聚,低耦合的特質.

如果耦合不可避免,那麼我期望這種耦合一定是要通過一層統一的抽像接口來完成

的,沒有約束的任由模塊之間縱橫交錯,互相調用和影響,只會讓模塊的複雜度

變成乘方,依賴關係變強. 這種複雜度和依賴關係的增加既會帶來更多的潛在bug風險

,也會增加日後代碼維護的難度及工作量.

但在現實的開發中,卻經常會發現想要達到這種 高內聚,低耦合,統一模塊互操作接口

的 狀態,會有很多的障礙.

比如,目前我正在設計的一個小型的語法分析器中涉及到了詞法模塊和語法模塊, 出於開發

效率的考慮,詞法模塊我選擇用lex, 語法模塊我選擇用yacc實現.一開始我期望詞法和語法

模塊之間作到足夠獨立,除了標準的yylex接口以外,不希望在詞法和語法模塊之間提供更

多的其他接口. 但是在實際實現中,卻發現,有的動作如果僅僅通過詞法模塊來完成,需要

花費10步甚至更多步的開銷,而如果將這個動作的一部分放入語法模塊,利用語法模塊的

處理能力的話,可以將完成這個動作所需的處理減少至步,步,甚至更少. (一個直觀的

例子就是,在Yacc編寫的語法規則里加入對Lex中的開始條件的設置,讓Lex對同樣的輸入

流作出上下文相關的規則匹配. )

這種情況下,通過引入更多的處理邏輯來確保模塊的獨立性, 爲以後的維護和擴展打下

更好的基礎,抑或是降低對模塊依賴性的要求,讓現有的代碼更簡潔有效,就需要軟件設計

人員作出一定的權衡了.

具體到我目前面臨的這個小型語法分析器的問題,我的選擇是適當降低對模塊依賴性的約束,

在不過多損失代碼擴展性及維護性的基礎上,將一部分動作挪到語法模塊中實現.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章