一、類隱藏的基本建議
雖然在JAVA語言中要實現類的隱藏非常簡單,只需要通過三個關鍵字即可以完成。但是在大部分情況下,讓JAVA程序員感到疑惑的是,在什麼時候該把什麼類隱藏。確實,在Java開發語言平台中,對於什麼類需要隱藏,什麼類不需要隱藏,往往沒有很嚴格的要求。為此程序開發人員需要根據自己的工作經驗來進行判斷。而即使有一定程序開發經驗的員工,也不一定能夠在這個問題上給出很好的答案。公說公有理,婆說婆有理,為此很難有一個統一的標准。筆者下面幾個建議,也是對自己這幾年來Java開發工作的總結。希望這些建議能夠幫助大家解惑。
1、不同模塊之間的類要相互隱藏。現在不少應用系統,為了提高開發效率,都提出了模塊化的設計理念。如最近比較流行的ERP系統,如果按模塊來進行設計的話,則在開發時不同的人員可以負責各自的模塊,而互不干涉。在ERP系統出售的時候,也可以按模塊來進行出售,因為各個模塊的功能是相對獨立的。當然這只是從管理層面來說模塊化設計的重要性,不過這不是我們今天要談論內容的重點。今天要談的是,如果應用系統按模塊化來進行設計,那麼不同模塊之間的內如何實現隱藏呢?其實很簡單。如供應商基本信息維護、供應商進貨單、應付帳款分屬於三個不同的模塊,分別為采購管理、庫存管理與應收應付管理。現在在設計應收應付這個模塊時其中有一個生成應付帳款的類,其需要用到采購管理模塊中供應商的信息(付款條件等等)、倉庫管理模塊中的供應商進貨單據(產品編號、數量、到貨日期等等),然後才能夠生成准確的應付帳款。那麼在應用程序設計的時候該如何實現呢?是在那個應付帳款作業對應的類中直接從數據庫中去查詢這些信息嗎,又或者去修改采購模塊中對應的類來實現?這雖然都可以達到預定的目的,但是都不是上上之策。個人認為,最好的方法就是程序開發人員先設計一個類(如Vender類),這個類會返回供應商編號、付款條件等信息。然後應付帳款作業中的類就直接調用這個類獲取需要的信息。一方面可能很多地方都需要用到這些信息,如果每次需要的時候都利用SQL代碼來獲取這些信息的話,那麼代碼量也會很大。相反直接調用類來實現這些信息反而更加的方面。另一方面,這個Vender類對於其他類是隱藏的。也就是說,其他類只能夠通過預定義的接口向這個類傳遞參數並直接引用其返回的結果,而不能夠修改類內部的元素。如此即使其他有十幾個類或者應用程序需要調用這個類的時候,其只要輸入的參數相同,則其返回的結果也就相同。那麼其他類在引用返回結果的時候,就不用擔心不兼容了。所以,應用程序的模塊化設計促使JAVA程序要實現類與類之間的隱藏;同時Java類相互之間隱藏的特性也方便了應用程序的模塊化設計。
2、數據類型類與其他類之間需要實現隱藏。在任何一個應用程序開發過程中,都需要根據企業的需要設計一些比較有針對性的數據類型。因為光靠應用程序所提供的那些數據類型往往不能夠滿足程序開發人員的需要。如需要設計一些數組、記錄等等數據類型。但是在設計這些數據類型的時候,程序人員就需要了一個難題。如現在在開發ERP系統的過程中,多個模塊(每個模塊由不同的程序員負責)都需要用到同一個記錄數據類型。那麼是每個程序員都設計一個記錄類型的數據類型,還是共用同一個數據類型呢?如果各管各的,就需要建立多個記錄類型的數據類型,管理起來比較麻煩,對後續升級也會遇到障礙。而如果大家共用一個記錄類型的數據類型,大家又擔心其他程序人員不小心修改了這個數據類型而給他們造成了麻煩。這之間難道就沒有和平的共存方式了呢?其實,在應用程序開發的過程中可以認為的將應用程序開人人員分為數據類型創者者與業務邏輯開發者。然後數據類型開發者可以根據其他開發人員的需要創建一些定義數據類型的類,這些類的話對於其他程序開發人員開發的類是隱藏的。也就是說,其他類不能夠對這個數據類型進行修改。那麼即可以提高這些數據類型的利用率,而且也可以保證其他類可以以固定的格式引用這些類。
3、業務層與表示層之間的類要相互隱藏。利用過J2EE開發平台的人肯定知道,在開發應用程序的時候,業務邏輯層與表示層之間是相互獨立的。業務邏輯層主要實現一些負責的運算,如物料需求計劃運算。而表示層的話只負責一些具體的顯示。如通過浏覽器客戶端來顯示結果還是通過軟件窗口來顯示運算結果。雖然客戶端所采用的方式不同,但是其內部的運算是相同的。此時最好把實現業務邏輯層的類與實現表示層的類相互隱藏起來。因為在實際開發過程中,他們往往是由不同的程序開發人員完成的。為了避免不同程序開發人員之間的相互干擾,避免表示層的開發人員無意中修改了業務邏輯層的Java類,就必須要把業務邏輯層的類隱藏起來。也就是說,表示層開發人員只需要知道業務邏輯層的類需要哪些參數、能夠以什麼樣的形式返回結果即可。然後表示層的類在調用業務邏輯層中的類的時候,只需要按照要求輸入參數、按照規則獲取結果即可,而不需要關注其業務邏輯層類內部的實現機制,從而減輕了表示層開發人員的工作量。同時也避免了業務層開發人員對這個類進行修改,從而其他的應用程序開發人員可以以同一種方式來引用這些類。
4、如果某個業務邏輯還不怎麼完善時,要執行隱藏。在應用程序開發的過程中,可能某些業務邏輯暫時沒有很好的解決方案,但是需要的參數或者返回的結果是確定的。此時可以把這個業務邏輯建立一個的類,並對其他類進行隱藏。如此的話,當出現更好的解決方案之後,就可以直接更改這個類中的業務邏輯。由於類中成員對於其他程序人員是隱藏的,為此對類中的處理機制進行更改並不會影響到其他人員開發的應用程序。他們只關心你能夠在最短時間內獲得准確的結果。為此在遇到這種情況時,最好把類與其他的類執行隱藏。
可見,哪些類需要相互隱藏可能判斷起來比較復雜。但是有一個普遍適用的原則,就是如果一個類有不同的程序人員需要引用。如用戶A設計了一個統計應收帳款余額的類,用戶B 與C,包括用戶A都需要調用這個類。那麼這個類就最好進行隱藏。防止其他類在調用這個類的時候,不小心修改了其內部的實現方式。這會對其他用戶調用這個類產生不利影響。