域驱动设计中的服务

时间:2013-04-03 13:21:00

标签: domain-driven-design

我正在创建一个试用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对象,然后使用存储库存储它。这是正确的吗? 然后,我想在今天租用3天的Web应用程序中提供 RentNow!的按钮,是否应该在rentNow中添加方法RentService计算天数或者我可以重新使用旧方法并在Controller类中计算日期吗?

1 个答案:

答案 0 :(得分:3)

  

最后,RentService只是创建一个新的Rent对象然后   使用存储库存储它。这是对的吗?

大部分是的。租赁服务是application service。但是,谁负责向服务提供UserFilm实体。它可以是控制器,但您也可以RentService自己这样做。控制器只负责传递ID:

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

该服务必须引用适当的存储库。好处是“租赁电影”操作完全由服务封装,控制器的责任更少。

对于RentNow,还要在应用程序服务上创建专用方法。这似乎是一个商业用例,因此应该在服务上明确说明。