业务命名最好不用直接用CRUD,除非其行为有非常强的CRUD语义,比如用addContact表示添加联系人,removeContact表示删除联系人是可以接受的。但是如果你用createOrder和deleteOrder来表示下单和取消订单是不合适的,在业务层,更贴切的命名应该是placeOrder和cancelOrder。
当然在Infrastructure层,比如OrderDAO,你还是应该采用CRUD的命名方式,用createOrder和deleteOrder来表示对订单数据的创建和删除。
Domain Event(领域事件),是领域实体发生状态变化后,向外界publish出来的事件。
该事件既可以在当前的Bounded Context下面被消费,也可以被其它Bounded Context消费。
其命名规则是:领域名称+动词的一般过去式+Event
这里的动词的一般过去式,非常关键,因为在语义上表达的是发生过的事情,因为Event总是在动作发生后再发出的。下面是几个举例:
- CustomerCreatedEvent,表示客户创建后发出的领域事件。
- OpportunityTransferedEvent,表示机会转移后发出的领域事件。
- LeadsCreatedEvent,表示线索创建后发出的领域事件。
从开发的视角来看,主要是两方面的测试,一个是单元测试,一个是基于command的集成测试。
单元测试,主要是针对Domain层的业务逻辑测试,有下面3个约定:
- 测试粒度要小,通常是业务方法,其scope不要超过一个类。
- 要稳定,要快,使用mock,不要对外部环境有依赖。
- 放在Domain的test里面,命名方式为Entity + Test,例如
CustomerTest
, ContactTest
, OpportunityTest
等