一次性加载配置属性的设计模式? [英] Design Pattern for one-time loaded configuration properties?

查看:188
本文介绍了一次性加载配置属性的设计模式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经常遇到在内存中存储从文件系统上的文件加载的几个(可能是复杂的)配置设置的问题。

I'm often faced with the problem of storing, in memory, a few (possibly complex) configuration settings loaded from files on the filesystem. I'm wondering if there's a better way to architect a pattern to this problem, however, than what I've been using.

基本上,我目前的解决方案涉及到三个步骤。

Essentially, my current solution involves three steps.


  1. 建立单例。由于数据是持久的,并且保证不会通过应用程序的运行时间改变,所以应该只需要一个对象实例。

  1. Build a singleton. Since data is persistent and guaranteed not to change through the runtime of the application, only one object instance should ever be needed.

使用getters公开数据。

Expose data with getters.

这样做的效果是很多我的代码看起来像这样:
MyConfiguration.getInstance()。getWeightOfBomb(),这看起来很奇怪。

This has the effect that a lot of my code looks like this: MyConfiguration.getInstance().getWeightOfBomb(), which looks rather odd to me.

有更好的方式来处理这个更语义的方式吗?

Is there a better way to handle this in a more semantic fashion?

推荐答案

依赖注入。您不一定需要使用DI框架,例如 Spring Guice ,但是你真的想避免使用单例丢弃你的代码。你仍然可以在实现中使用单例,但没有理由你的代码的其余部分需要知道它是一个单例。单元是单元测试和重构时的巨大痛苦。让你的代码引用一个接口。例如

Dependency Injection. You don't necessarily have to use a DI framework like Spring or Guice but you really want to avoid littering your code with singletons. You can still use a singleton in the implementation, but there is no reason the rest of your code needs to know that it is a singleton. Singletons are huge pain when unit testing and refactoring. Let your code reference an interface instead. e.g.,

 interface MyConfig {
     double getWeightOfBomb();
 }

 class SomeClass {
    private MyConfig myConfig;

    public void doSomething() {
       myConfig.getWeightOfBomb();
    }
 }

 class MyConfigImpl implements MyConfig {
     public double getWeightOfBomb() {           
          return MyConfiguration.getInstance().getWeightOfBomb(); 
     }
 }

如果使用DI框架,以注入您的 MyConfig 实现。如果你不这样做,那么仍然具有所有好处的最简单的方法是做如下:

If you use a DI framework, just setup you classes to have your MyConfig implementation injected. If you don't, then the laziest approach that still has all the benefits is to do something like:

 class SomeClass {
    private MyConfig myConfig = new MyConfigImpl();        
 }

真的取决于你。重要的是,你可以在每个实例的基础上替换 myConfig ,当你以后意识到你需要改变和/或单元测试的行为。

Really it's up to you. The important thing is that you can replace myConfig on a per instance basis when you later realize that you need the behavior to vary and/or for unit testing.

这篇关于一次性加载配置属性的设计模式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆