spring如何实现领域驱动模型DDD呢

发布于 2022-09-04 20:44:41 字数 487 浏览 16 评论 0

领域驱动模型, 让实体类有了一部分的业务方法, 那么在实体类中 @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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉月流沐 2022-09-11 20:44:41

我不建议过早的把DDD的model的实现基于某一个framework来做,先实现model,而框架最好在某一个部分使用,简单的把entity认为是POJO + service的实现更是比较可笑和不理解真正ddd精髓的做法。DDD不是具体依赖某种语言进行实现的,那么加入换成ruby或者php怎么办?更何况spring并不是DDD的framework。所以,我的建议是试图理解如何设计model和实现的。更重要的是,把ddd的某一个buiding block单独拿出来使用那是完全错误的,完整的应用这些buiding block保证了你如何可以是一个相关领域业务逻辑的实现是高度偶尔,保证business state的准确性和非多样性。

绮筵 2022-09-11 20:44:41

领域模型驱动中有个概念是仓库, 可以用来获得模型
spring中有@Repository的注解代表这么个意思
就是你可以在interface RoleRepository中获得Role, 比如Repository#newRole()

你可以定义interface Role为接口, 在Role的实现中手动注入RoleMapper, 这个方法不暴露到接口中

@Repository
public class RoleRepositoryImpl implements RoleRepository {

    @Autowired
    RoleMapper roleMapper;

    @Override
    public Role newRole() {
      RoleImpl role = new RoleImpl();
      role.setRoleMapper(roleMapper);
      return role;
    }

}

public class RoleImpl implements Role {

    RoleMapper roleMapper;
    
    setRoleMapper(RoleMapper roleMapper) {
        this.roleMapper = roleMapper;
    }
    
    // other setter or getters
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文