领域模型中如何访问数据库

比如一个模型中,有一个方法,就拿注册来说吧,注册需要判断用户名是否重复,这个判断肯定需要查询数据库了,那么这个在模型中如何实现呢,还有一些类似需要查询数据库字典表的数据来判断是否走下面的代码,这些类似的查询在模型中,应该怎么实现呢??

简单点IOC加领域服务接口,今天你判断用户名重复需要检查user表,明天你判断用户名重复需要检查user和bbsuser表,对于这种需求我一般都是放在领域服务里,具体的实现逻辑可以随时变化

复杂点用领域事件,注册时发出UserRegisteringEvent,将判断的逻辑扔给外部类,自己无需处理

再复杂点用AOP拦截用户注册方法,或者用特性(C#)、注释(JAVA)来标记UserRegistDTO

目前我是用DomainService解决的,也就是在DomainService调用仓储接口实现的

感觉用事件或者特性来解决的,不太合适,因为check本身是模型的行为,让到外面去做就等于吧逻辑分散了(当然有的时候只能这样妥协的)