据我所知,使用全局变量可能会因为紧密耦合或测试问题而导致代码异味。
在我的情况下,我想使用 IOC / DI 的某些对象,这些对象可能在片段的任何活动中依赖。
所以我创建了一个名为全局的类,并将静态变量。
public class Global {
private static ConvertStrategy convertStrategy;
private static EntityController entityController;
public static void init(ConvertStrategy convertStrategy, EntityController entityController){
Global.convertStrategy = convertStrategy;
Global.entityController= entityController;
}
public ConvertStrategy getConvertStrategy(){
return convertStrategy;
}
public EntityController getEntityController (){
return entityController;
}
}
然后我可以在MainActivity中启动它,
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
Global.init(new OfflineConvertStrategy() , new OfflineController());
...
...
}
所以很明显现在我使用的是离线算法,然后其他时候我可以为在线版本创建其他类型的策略或控制器,而无需更改任何依赖于片段或活动的代码,这就是IOC / DI对我有利的方式。
抱歉我的描述不好,希望这张图片具体化:
但是当IOC / DI 对象数增长时,我觉得它很难维持。
例如......
public class Global {
public static Resources resources;
public static DateConvertStrategy dateConvertStrategy;
private static MemberController memberController;
private static ProjectSearcher projectSearcher;
private static OfficeController officeController;
private static EntityController<Project> projectController;
private static EntityController<IssueType> issuetypeController;
private static EntityController<Issue> issueController;
private static EntityController<IssueComment> issueCommentController;
private static EntityController<Timeline> timelineController;
private static EntityController<MemberIdCardModel> memberIdCardController;
private static EntityController<TodoTask> todotaskController;
...
...
}
我觉得我过分使用了IOC / DI和全局变量...
请分享您的想法。