2011-03-20 159 views
3

我認爲服務/應用層與Larman描述的GRASP控制器是一樣的,它是超越GUI層的第一個委託給域層的對象,應該可以從不同的層次重用GUI。服務層=應用層= GRASP控制層

服務(埃文斯)層是一樣的應用程序(福勒)層,因爲福勒本人是這麼說的,他在「bliki」關於「貧血域模型」:http://martinfowler.com/bliki/AnemicDomainModel.html

報價: 「應用層[他命名爲服務層]:定義 軟件應該做的工作並指導表現域對象 摸出問題的任務,這層負責的 業務意義的或必要與 應用層的交互。的其他系統,該層保持精簡,它不包含業務規則或知識,但不包含 ,但僅協調任務 ,並將工作委託給下一個 下層的域對象的協作。它沒有狀態反映經營狀況, 但它可以有反映任務爲 用戶或程序的進展狀態。」

現在考慮上面的描述(也見捕鳥的PEAA書,關於從用例中識別服務層方法),並考慮福勒描述的服務層中的圖片,該層描述服務層是在該URL的「用戶界面」之後的第一層:http://martinfowler.com/eaaCatalog/serviceLayer.html

現在比較上述服務/應用層描述 與Larman關於GRASP控制器的一些詞彙(第3版 版本的hi (「UML and patterns」),年齡 302-306): 「...超出UI層的第一個對象,它接收和協調 (」控件「)系統操作...」 「 ...表示系統事件 發生的用例場景...「 」...通常,控制器應該將需要完成的工作 委託給其他對象;它協調或控制活動。它 並沒有做太多的工作本身......」

我認爲Larman與的把握控制層是一樣的 埃文斯/福勒的應用/服務層。是否有其他人不同意? 然後請解釋之間的差異顯著這些概念,以及控制器類的一些例子,而不是服務/應用程序類。

我的問題是天生的,因爲有人說模型域對象的創建是控制器的責任,而不是其他服務/應用層。但是,你能給我一個服務層類的例子和控制器類之間的區別嗎?

回答

2

實際上UI控制器和域控制器是最常用的模式。

UI控制器以MVC模式協調對View的訪問。

域控制器協調對域的訪問,它被稱爲服務層(我更喜歡Fowler)或應用層(Evans)。

兩者都是間接層(FaçadePattern),用於分離子系統/層之間的類。它帶來了模塊化和更好的可維護性(您可以將域交換爲遠程服務或將視圖從HTML切換到Flex,而只需更改間接層)

GRASP控制器似乎是兩者的混合體。我建議您僅將此術語用於分析,而不用於實施。

希望它有幫助!

+0

這些類是按照慣例來排列嗎?我有點喜歡在他們的狀態存儲恕我直言,我覺得它更簡單... – Haroon 2011-08-06 08:45:42

+0

@Wanderson桑托斯,伊莫,應該沒有分離的控制器作爲用戶界面和域。在MVC中,沒有這樣的事情。控制器協調(業務)服務完成的邏輯(進而處理/變換/處理(域)模型)和視圖。每個控制器(C)使用(商業)服務來獲得模型(M)並提供該模型(M)的視圖(V)。 M-V-C的分離允許您交換視圖技術,而不是使用Facade模式。 – despot 2014-01-08 12:36:41

+0

當您注意到多個客戶端(客戶端是另一個服務或控制器 - 內部或客戶端是外部系統)使用多個(組)服務時,應使用外觀模式用於服務。 – despot 2014-01-08 12:37:31