【发布时间】:2018-07-01 05:37:51
【问题描述】:
在工厂类中使用依赖注入是不好的做法吗?我应该让我的框架的用户处理依赖注入吗?我应该使用方法 A 还是方法 B?
SomeUserClass
package com.impl;
@Service
public class SomeUserClass {
@Autowired
private SMSActionFactoryService actionFactoryService:
@Autowired
private PropertyManager properties;
public void doStuff(){
// approach A
SMSAction action = actionFactoryService.createAction("hello");
// approach B
action = SMSActionFactory.createAction(properties, "hello");
// the user should never call Action::doAction.
// It gets called by the framework on a condition.
scheduler.addAction(State.ERROR, action)
}
}
短信操作
package com.framework;
public class SMSAction extends Action {
public SMSAction(PropertyManager properties, String message){
}
public void doAction(){
}
}
SMSActionFactoryService
package com.framework;
@Service
public class SMSActionFactoryService {
@Autowired
private PropertyManager properties;
public SMSActionFactory createAction(String message) {
return new SMSActionFactoryService(properties, message);
}
}
短信操作工厂
package com.framework;
public class SMSActionFactory {
public static SMSActionFactory createAction(PropertyManager properties, String message) {
return new SMSActionFactory(properties, message);
}
}
【问题讨论】:
-
方法 A 使单元测试变得容易。方法 B 使单元测试变得痛苦。避免痛苦! (并遵循 TDD 或至少在不久之后编写单元测试以快速发现代码异味。)
标签: java spring factory-pattern