2016-02-03 63 views
1

我從閱讀this question瞭解了很多,這個問題與我的很相似。這是我第一次嘗試OOP,我一直使用程序模式編碼。在問我的問題之前,知道我正在使用的堆棧形式的上下文可能會很有用。使用Angular MVC框架的OOP策略?

服務器:的Debian Linux的
服務器端語言:用的NodeJS快遞框架
DB:間接MongoDB的;實際上是Firebase形式的BAAS。

由於我們使用BAAS,NodeJS的唯一功能就是提供文件。事實上,我們甚至沒有安裝模板引擎。在前端我們使用的是Angular。整個網站是一個使用Angular路線的實時SPA。

我想知道的是如何將OOP應用於沒有真正方法創建類或類的實例的MVC框架。從我在問題開始時鏈接的問題來看,答案似乎是使用角度工廠作爲類。據我所知,每個Angular模塊本質上都是一個巨大的對象,應該包含它自己的MVC應用程序。我想想知道如何瘦控制器應該是

藉助Ruby On Rails,我們鼓勵開發人員創建胖模型和瘦控制器。

覺得我應該去了解這個問題的方法是:

1)創建一個模型,並與工廠的表單類包裝。
2)創建控制器,創建這些工廠的實例,操作和調用這些工廠的方法,併爲視圖創建一個提要。
3)創建一個視圖,通過雙向數據綁定來顯示由控制器提供的數據。

我在這裏遇到的問題是,無論我看到的人都在談論保持你的控制器很薄。由於我是OOP和MVC的新手,我確信我沒有正確應用其中一個或兩個的概念。

我的方法是否正確地遵循OOP和MVC概念?如果不是,我在哪裏弄錯了,這些概念對我的情況的正確應用是什麼?

回答

0

首先,不要試圖比較ruby-on-rails控制器和角度控制器,它們有不同的目的和責任。

在服務器端框架(不僅ROR),控制器負責傳入請求處理,通常這是否:

  • 從請求
  • 驗證輸入提取的輸入數據
  • 將輸入傳遞給某個業務邏輯對象(可能是實現某些需求的模型或特殊對象)
  • 格式化響應(生成HTML模板,轉換爲json等)

這是很多,所以你需要嘗試移動每一個這些步驟來分離對象,並儘量保持控制器精簡。

順便說一下,使模型變胖也是一個錯誤。任何類違反Single Responsibility Principle

一般的建議是將您的業務邏輯分解爲小對象,並儘可能獨立於框架。這樣,修改,維護和測試你的代碼會容易得多。

現在,如果你看的角度控制器,它處理用戶界面(視圖),並負責:

  • 觸發從服務器
  • 對用戶動作的數據加載過程在UI
  • 驗證由用戶
  • 發送修改後的數據返回給服務器
輸入的數據

這些責任與ROR控制器的共同點很少。

此外還有一個想法,angular.js不是MVC框架,而是MVW(Model - View - Whatever)。

再一次,最好讓業務邏輯儘可能與框架分開。 而且你仍然需要保持你的控制器和其他所有對象都很薄。

這裏有一些方法的角度來做到這一點:

  • 分割大控制器成更小的,更具體的一個
  • 轉換小特定的控制器分爲指令
  • 包裝數據和裝載/更新過程分成服務
  • 搬出任何你可以成爲小普通物體,使用它們從服務/工廠/指令/控制器

實際上,有人建議不要使用控制器,而是使用指令:How I've Improved My Angular Apps by Banning ng-controllerDie Controllers Die!

如果您想以OPP方式創建應用程序,那麼請不要將注意力集中在框架本身上,而是嘗試遵循一般的OOP principles