2011-06-17 50 views
0

因爲我剛剛學習了Java的所有成果,並且想了解一件事情,那就是在我腦海中飛翔的一段時間。代碼波紋管是兩種不同類中兩種方法的快速示例。第一個顯然是一個頁面的控制器,另一個是服務的一部分。我應該在哪裏創建新的實體 - 在表示層或不是?

@RequestMapping("/something) 
public void doSomething() { 
    ... 

    SomeEntity example = new SomeEntity(); 
    example.setAccount(account); 
    example.setSmthElse(else); 
    example.setDate(new Date()); 
    example.setSomething(something); 

    someService.saveSomeEntity(example); 
} 

... 

public void saveSomeEntity(SomeEntity object) { 
    someEntityDAO.save(object); 
} 

所以在這裏我的問題是應該在新的實體SomeEntity和它的設置創建的屬性在表示層部分如上還是應該以某種方式在saveSomeEntity方法,通過所有PARAMS傳遞給做了做它?

回答

3

控制器不是表示層。它是MVC中的C.持久層只應該關注持久性,而不是模型對象的創建。上面的代碼是可以的。有些人會在服務中創建對象,而不是在控制器中,但是參數在控制器中很容易找到,所以恕我直言,它可以接受。

+0

對不起,我的錯誤調用控制器的表示層。我有點掙扎與層的東西,但找出哪個是哪個。 (英語不是我的第一語言) – Rihards

2

是的,實體可以在任何層創建。

有些人更喜歡DTO(具有相同結構的單獨對象),然後將其轉換爲實體。

只是爲了避免在jsps中寫入java代碼。實例化控制器中的對象,或將其留給某個綁定機制。

+0

你真的會在jsp中創建實體嗎? – hvgotcodes

+0

當然不是在jsp中,而是在web層(控制器) - 是的。實際上 - 在jsp和控制器之間 - 有一些綁定機制。 – Bozho

+0

我認爲他指的是控制器層中的一組對象,用於鏡像域圖層。您不會將從域圖層返回的對象映射到控制器對象。似乎是多餘的,但如果域層實際上落後於服務而不是根據情況而定,可能不是。 – Casey

相關問題