避免在Android中使用全局变量的更好方法是什么?

时间:2017-07-08 07:22:48

标签: java android oop design-patterns

据我所知,使用全局变量可能会因为紧密耦合或测试问题而导致代码异味。

在我的情况下,我想使用 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对我有利的方式。

抱歉我的描述不好,希望这张图片具体化:

Dependencies

但是当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和全局变量...

请分享您的想法。

0 个答案:

没有答案