我正在为DDD重构一个应用程序,到目前为止一直很好,但我对某些责任有疑问,以及解决它的最佳方法是什么。
该应用程序是呼叫中心代理使用的Web应用程序,使用CRM功能,后端是REST API。
用例如下:代理商呼叫客户并需要收集一些信息/优惠促销等。 在打电话给客户并与他交谈之后,他需要为此联系尝试填写一些信息,其中一些信息是组合框,其中包含从数据库填充的数据,并且它将具有实体ID的POST发送到端点以进行注册它
所以我们有一个端点contactAttempt接收数据,customerId,agentId,一些组合框信息(subjectId,reasonId,extraInfo1,extraInfo2),额外的信息不会调用它,只是为了简化。
该信息被反序列化为传递给应用程序服务的DTO对象,该对象咨询相应的存储库以检查id是否有效并返回实体,如果找不到实体,则抛出控制器的异常用一条消息抓住并回答客户。
如果所有实体都有效,则会有一些域规则,例如第一次与客户联系,发送欢迎电子邮件以及其他内容。
我怀疑这是从存储库中获取实体的步骤,它应该是那样的,或者我应该在控制器中获取它,如果我需要的只是存在,那么我只用逻辑传递给域服务需要应用业务规则吗?
答案 0 :(得分:1)
MVC负责在“应用程序层”的消息中反序列化HTTP请求。
因此它应该从querystring / body / headers获取所需的所有值,并作为不可变值(命令)传递给服务。这是因为应用程序服务(处理程序,无论如何)应该以事务方式执行命令,并且如果在应用程序层之外访问实体(因此,行为),则无法确保在应用程序层之外不会发生任何修改。