2013-04-03 144 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,还可以在应用程序服务上创建一个专用方法。这看起来像是一个商业用例,因此应该在服务上明确说明。