第2章 組件設計原則
Java陣營一直倡導開源,開源運動如火如荼展開,催生了無數組件。但是,坦率地講,這些開源的組件中,能夠直接拿過來,不做任何改造,就能用于商業軟件的構建,滿足功能和性能的要求,這樣的優秀組件并不多見。因此,核心軟件開發者時常面對的尷尬局面是:大量的開源資源,都不滿足我的要求。
實際上,組件設計是軟件設計開發最精髓所在,凝聚了面向對象、數據結構、設計模式、線程并發同步、網絡通信、操作系統等諸多領域的最核心技術,一直是設計開發領域彰顯技術水準的最高領地。
一個組件,要想被廣泛重用,滿足不同系統的使用要求,就要求組件有足夠的能力適應不同的應用場合,提供滿足需要的功能,并表現出優秀的性能。因此,組件設計過程中,組件設計者要考慮的問題非常廣泛而復雜,組件設計者需要具備的知識、技能和經驗要求非常高,主要包括如下三個層次的核心能力。
(1)第一層次:編程能力。主要包括:
● 編程語言的熟練使用;
● 數據結構的精準運用;
● 多線程并發、同步的準確理解和實現;
● Socket網絡編程技術的全面掌握和運用;
● 數據庫概念的精準理解和熟練應用。
(2)第二個層次:設計能力。主要包括:
● 面向對象思想的精準理解和正確應用;
● 設計模式的精準理解和正確應用;
● 優秀的框架、中間件、數據庫的深入洞悉和優化能力;
● 數據備份、安全、可維護性等方面的技術知識掌握;
● 設計方案的分析、比較、權衡和抉擇。
(3)第三個層次:需求分析能力。主要包括:
● 對客戶明確的功能需求進行分析的能力;
● 對客戶明確的性能、數據備份、安全、可維護性等方面需求進行分析的能力;
● 推理、提取、歸納客戶隱性需求的能力;
● 對需求方案進行分析、比較、權衡和抉擇的能力。
每個層次的完成標準,是對本層次內的產出物,可以精確地闡述,為什么一定要這樣,而不能采用別的方案或實現的理由。比如,在第二個層次——設計階段,必須要能精確地說出:這樣設計軟件的依據在哪里,而且為什么一定要這樣設計,而不能用其他的方案呢;這種設計方案與別的設計方案相比較時優勢在哪里,不足在哪里;選擇這種設計方案的理由在哪里。在深厚的技術和經驗積累的基礎上,能夠橫向的對各種方案進行深入的優缺點分析、比較、權衡和抉擇,是相應階段修煉完成的重要標志。
對一個本科畢業生來說,走上工作崗位后,在項目實戰中進行學習和積累,到達第一個層次,至少需要2~3年的時間。修煉第二個層次,還需要3~4年的時間。修煉第三個層次,還需要2~3年的時間。
考慮實際工作中,一個軟件開發人員經常在一個項目開發過程中,對以上三個層次的相關活動都會參與,相當于三個層次同時進行修煉,因此通常工作經驗至少在5年以上才有可能涉足組件設計這個領域。另外,逐步地完善和全面提升,日臻精純,需要天賦、勤奮、深入的思考和歲月的積累。這也就是,為什么在軟件領域,組件到處泛濫,但優秀組件卻不多的原因所在。
本章將對組件設計過程中要考慮的核心要素、設計中要遵循的核心原則進行總體闡述,使讀者能從總體上掌握如何發現、評判、設計一個優秀的組件。
本章將對目前業界存在的諸多技術爭論、誤區進行澄清,讓讀者從所謂的“業界潮流”、教條、“黃金定律”中走出來,真正理解組件設計過程的核心原則。這些核心原則如下:
原則一:精準地解決共性問題
原則二:無配置文件
原則三:與使用者概念一致
原則四:業務無關的中立性
原則五:對使用環境無依賴
原則六:單類設計和實現
下面來詳細講解每個核心原則。