spring如何实现领域驱动模型DDD呢
领域驱动模型, 让实体类有了一部分的业务方法, 那么在实体类中 @Autowired 一个 Dao 或者 MyBatis Mapper就不成功啊, 因为这个实体类不是 Component, 实体类都是 new 着用的
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
class Role{
private Long id;
private String name;
//getter/setter
//some method
@Autowired
private RoleMapper roleMapper;
public boolean isBindMenu(){
roleMapper.xxxxx();
}
}
在其他地方如service中, 不能 new Role()啊, RoleMapper 注入不进来
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不建议过早的把DDD的model的实现基于某一个framework来做,先实现model,而框架最好在某一个部分使用,简单的把entity认为是POJO + service的实现更是比较可笑和不理解真正ddd精髓的做法。DDD不是具体依赖某种语言进行实现的,那么加入换成ruby或者php怎么办?更何况spring并不是DDD的framework。所以,我的建议是试图理解如何设计model和实现的。更重要的是,把ddd的某一个buiding block单独拿出来使用那是完全错误的,完整的应用这些buiding block保证了你如何可以是一个相关领域业务逻辑的实现是高度偶尔,保证business state的准确性和非多样性。
领域模型驱动中有个概念是仓库, 可以用来获得模型
spring中有
@Repository
的注解代表这么个意思就是你可以在
interface RoleRepository
中获得Role
, 比如Repository#newRole()
你可以定义
interface Role
为接口, 在Role
的实现中手动注入RoleMapper
, 这个方法不暴露到接口中