【问题标题】:Service in Domain Driven Design领域驱动设计中的服务
【发布时间】:2013-04-03 13:21:00
【问题描述】:

我正在创建一个应用程序来尝试 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! 按钮,我是否应该在 RentService 中添加一个方法 rentNow 来计算天数或者我可以重新使用旧方法并在 Controller 类中计算日期吗?

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

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

    大多数情况下是的。出租服务是application service。但是,谁负责向服务提供 UserFilm 实体。它可以是控制器,但是您也可以让RentService 自己执行此操作。控制器只负责传递 ID:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2014-04-25
      相关资源
      最近更新 更多