2015-10-13 29 views
1

我最近一直在想這個。到現在爲止,我一直訂閱約翰爸爸的建議,該建議可以看這裏:角度控制器:每個視圖1個 - 它有意義嗎?

https://github.com/johnpapa/angular-styleguide#controllers

Define a controller for a view, and try not to reuse the controller for other views. Instead, move reusable logic to factories and keep the controller simple and focused on its view. 

他給出了一個理由,我不明白,但對我來說,主要是由易用性的動機-work /可維護性。基本上,在處理大型應用程序時,真的很難找到一個負責幾個不同視圖的臃腫控制器。如果開發人員想要清理控制器,他/她必須查看每個視圖並確定使用的內容以及爲什麼(如果方法非常相似,可以合併這些方法),這是一項重大的工作。通常情況下(特別是在時間有限的情況下),他們會選擇將所需的任何功能添加到模型中,然後「稍後再回來」,這就是它首先如何膨脹的原因。此外,我一直使用控制器/指令來指示邏輯是否在許多視圖中重複出現(即,如果另一個開發人員走到我寫的控制器,他/她可以確定我只用它一個視圖,因爲否則它將是指令)。

這是一個類似的問題,端點問題基本上有人在需求基礎上添加端點,最終由於新的人不知道舊的端點或簡單的健忘API超級膨脹和重複。然而,正如我所說,最近我一直認爲,這個1-1控制器查看關係真的對整個MVC模式有效,因爲它將模型耦合到視圖並破壞了關注點的分離。我的意思是,只要控制器保持專注(即我們有一個EditUserCtrl,它的工作是編輯用戶等),那麼爲什麼兩個視圖不能使用該控制器呢?我的意思是,如果企業決定在另一個具有相同功能的地方需要一個新視圖,爲什麼我不應該只寫一個新視圖並將它連接到舊控制器?我想我所說的是我無法協調違背框架基礎的慣例。

很想聽到別人對此的想法。提前致謝。

回答

0

就像你說的那樣。如果一個控制器負責多個視圖,任何開發人員都可以走到它,改變一些東西,希望增加新功能到查看A,甚至不知道它正在打破查看B。我認爲主要目標是保持控制器清潔和整潔。這樣,最好有2個控制器幾乎完全相同,但是隻有2〜3行代碼比許多其他文件引用的文件都沒有人控制它。

在一方面,你必須改變2個控制器,如果事情在視圖中的視圖B之前急劇變化,但如果它是一個複雜的任務,你可能有控制器調用某種網關這可能意味着你將不必改變任何控制器(好的結果)。另一方面,如果你有10個不同的視圖重複相同的2〜3行代碼,也許是抽象控制器功能的時候了。

0

它不耦合模型,因爲最好的做法是在指令中擁有業務邏輯並查看邏輯,並且在控制器中沒有真正的邏輯。因此,您可以爲每個視圖添加一個控制器,但該控制器應該非常瘦。就我個人而言,我只想使用控制器在服務和指令之間分配和通信變量。如果你想重用控制器代碼,那麼把這個邏輯放在指令和服務中會阻礙你?

幾乎沒有我編寫的控制器(對於我的工作,我以角度編寫大型企業應用程序)具有邏輯。有時候,控制器中的邏輯是不可避免的,但儘量保持儘可能少的邏輯。

以這種方式,控制器保持專注。對於一個大型的應用程序,例如10頁,對於可用性和可讀性來說,每個頁面都有一個小型控制器,而不是一個巨大的控制器和多個變量混合,當您想要重新使用方法和函數時,他們在服務。如果你發現自己有三個頁面的表單或按鈕具有完全相同的邏輯,那麼用自定義指令可能會更好。

相關問題