java – 如何处理将依赖项注入富域模型?
发布时间:2020-12-15 00:39:31 所属栏目:Java 来源:网络整理
导读:在具有丰富域模型的Web服务器项目中(应用程序逻辑在模型中,而不在服务中)如何处理将依赖项注入模型对象?你有什么经历? 你使用某种形式的AOP吗?喜欢Springs @Configurable注释?加载时间还是构建时间?你遇到的问题? 你用手动注射吗?那你如何处理不同的
在具有丰富域模型的Web服务器项目中(应用程序逻辑在模型中,而不在服务中)如何处理将依赖项注入模型对象?你有什么经历?
你使用某种形式的AOP吗?喜欢Springs @Configurable注释?加载时间还是构建时间?你遇到的问题? 你用手动注射吗?那你如何处理不同的实例化场景(通过库创建对象[如Hibernate],用“new”创建对象……)? 或者您是否使用其他方式注入依赖项? 解决方法
我们使用Spring的@Configurable(以及常规的new运算符),它就像魅力一样.没有更多
anemic domain models.最后,这是更加面向对象的设计,不是吗:
Person person = new Person(firstname,lastname); // weird peopleService.save(person); // good (save is @Transactional) person.save(); Mail mail = new Mail(to,subject,body); // weird mailService.send(mail); // good (send is @Transactional) mail.send(); 我们还没有做过任何性能比较.到目前为止,我们根本没有觉得有必要这样做. 编辑:这是人类的样子: @Configurable("person") public class Person { private IPersonDAO _personDAO; private String _firstname; private String _lastname; // SNIP: some constructors,getters and setters @Transactional(rollbackFor = DataAccessException.class) public void save() { _personDAO.save(this); } @Transactional(readOnly = true) public List<Role> searchRoles(Company company) void{ return _personDAO.searchRoles(this,company); } // it's getting more interesting for more complex methods @Transactional(rollbackFor = DataAccessException.class) public void resignAllRoles(Company company) { for (Role role : searchRoles(company)) { role.resign(); } } } // the implementation now looks like this personService.getPerson(id).resignAllRoles(company); // instead of this roleService.resignAll(personService.searchRoles(personService.getPerson(id),company)); 这就是Spring配置: <context:spring-configured /> <bean id="person" class="org.example.model.Person" lazy-init="true"> <property name="personDAO" ref="personDAO" /> </bean> 注意:如您所见,周围仍有服务,例如:搜索对象(personService.getPerson(id))但是对传递的对象(例如人)进行操作的所有方法都将移动到该类本身(即person.save()而不是personService.save(person)).该方法本身保持不变,适用于任何底层数据访问层(纯JDBC,Hibernate,JPA,……).它只是移动到它所属的地方. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容