2013-04-03 179 views
2

我正在創建一個應用程序來嘗試DDD。
該應用程序是爲租看電影,我的類別是:域驅動設計服務

class Movie{ 
    String title 
    String descrition 
} 

class Customer{ 
    String username 
} 

class Rent{ 
    Film film 
    User user 
    Period period 
} 

對於我所知道的DDD我也有RentService創建Rent對象。所以,我有:

class RentService{ 
    Rent rentMovie(User user, Film film, Date from, Date to){ 
     //validation check (like if the film is already rented) 
     return rentRepository.store(new Rent(user, film, from, to)); 
    } 
} 

到底RentService只需要創建一個新的Rent對象,然後存儲它使用一個倉庫。這是對的嗎?
然後,我想提供一個按鈕到RentNow!在從今天起租期爲3天的Web應用程序中,我應該在RentService中添加一個方法rentNow來計算日期,還是我可以重新使用舊方法並計算Controller類中的日期?

回答

3

最後RentService只是創建一個新的Rent對象,然後 使用存儲庫存儲它。這是對的嗎?

大部分是的。租賃服務是application service。但是,誰負責將UserFilm實體提供給該服務。它可以是控制器,但也可以有RentService本身。控制器只負責傳遞ID:

Rent rentMovie(int userId, int filmId, Date from, Date to) 

該服務將不得不引用相應的存儲庫。好處是「租賃電影」操作完全由服務封裝,控制器的責任更少。

對於RentNow,還可以在應用程序服務上創建一個專用方法。這看起來像是一個商業用例,因此應該在服務上明確說明。