面向對象的php之類解耦的好處

爲什麼要解耦呢?

舉個例子:

getScore($student){

}

假如一個課程類,裏面有一個獲取學生分數的的方法getScore()。該方法要求傳入一學號。

在這個方法中,就跟學生類student耦合了。

因爲在getScore方法中,需要$student->getNum();

假如現在學生類被類作者改變了,取消了getNum()這個方法,那麼你這個方法,就需要重新寫了。

當開發人員只有很少人時,這個耦合帶來的影響是比較小的,因爲我們大概都知道在哪裏用了,改起來也不麻煩。

但是當項目比較大,開發人員多起來的時候,改動一個,幾乎就需要改動很多類了。

解耦比較好的方法,就是需要什麼,就要求什麼:

getScore($StudentId){

}

這樣,當學生類變動的時候,就不需要擔心自己的類需要改變了。

 

這裏有出現了幾個問題:

1、  學生類不符合開閉原則,如果學生類符合開閉原則,那麼我們這個耦合關係也沒問題。

需求是經常變更的,在開發項目過程中,完全做到開閉原則是不可能的。很多項目在開發過程中,也是需要不斷地重構。

 

2、  如果所有類都解耦,那麼是否是一個類修改了,那麼其他地方都無需改變了呢?

有些改動是不影響其他地方,比如getNum()方法裏面加了一個判斷,這樣只是更改了這個方法,在地方來說,依然調用的是getNum(),所以是不會改變的。

但是很多時候,其他地方也是需要改動的。不過這個時候,改動的,只是場景方法中而已。比如現在刪除了學生類中的getNum()方法。在getScore($StudentId)裏面就無需改變的。但是在場景中,還需要改變獲取學號的方法,然後再傳進去這個getScore中。

 

3、  像上面的getScore方法,如果在方法裏面修改獲取學號,也只需要修改一次,但是如果解耦的話,就需要所有場景都需要修改。

的確是這樣的。但是如果類能夠解耦的話,這個類的開發人員無需瞭解另外一個類具體功能功能是什麼。當有多個人同時開發的時候,兩個類就能並行開發,而無需擔心需要哪個類先開發完才能繼續開發下一個類。

 

在像c++,java語言中,類解耦能夠使類不需要再重編譯。要知道,中大型項目編譯起來,往往是幾個小時(甚至是幾天)。所以類解耦,能夠讓類無需重編譯,減少編譯時間。

 

綜合起來就有以下優點:

1、  在c++,java這種語言中,能夠減少編譯時間

2、  各個類能夠同時開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章