2009-11-05 75 views
2

模型和DAO應該如何交互?我正在組建一個簡單的登錄模塊,我不確定將「業務邏輯」放在哪裏。如果我將邏輯與數據放在模型中,我將如何訪問邏輯?模型(MVC)和DAO應該如何交互?

目前,我有:

  1. 控制器接收形式的數據
  2. 模型即,使用一個分貝表
  3. DAO的簡單反射休眠根據 控制器收到的 表單參數執行簡單的選擇查詢。

回答

2

控制器必須找到/加載匹配請求的業務對象並執行它。 Strategy Pattern在這方面很有用。業務對象必須得到DAO的處理和執行該過程的模型。

E.g. (僞,在前端控制器servlet內)

public void process(request, response) { 
    View view = new View(request, response); 
    Action action = ActionFactory.getAction(request); 
    if (action != null) action.execute(view); 
    view.navigate(); 
} 
+0

我同意。我認爲控制器就是定義視圖或服務與業務邏輯之間的API。將業務邏輯放在控制器中推動它成爲「上帝」類。 – 2009-11-09 06:24:30

+0

與使用「策略模式」相比,使用域對象(模型和DAO)與服務層有什麼關係?根據我對「戰略模式」的理解,它不太合適。 – Dan 2009-11-17 02:10:52

+0

例如,您可以使用一個'Map ',其中'String'部分表示pathinfo(並且如果需要,前綴請求方法)並且'Action'表示適當的動作類(可以靜態加載一次使用註釋或標記界面查找)。 – BalusC 2009-11-17 15:42:17

1

把它放在控制器中。控制器就像你的應用程序的大部分邏輯被寫入的核心。

將業務邏輯放在模型級別上並不好。

0

一個典型的分層會是這樣的:

  • 控制器
  • 型號
    • 業務層
    • 數據層(DAO)

該模型將同時包含業務層和數據層,同時保持這些層鬆散耦合到有意義的範圍。控制器將訪問該模型,在大多數情況下該模型應該是業務層。控制器最好不能直接訪問數據層,但在較小的應用程序中會發生。