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

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

问题描述

我经常面临在内存中存储从文件系统上的文件加载的几个(可能是复杂的)配置设置的问题。我想知道是否有更好的方式来构建一个这个问题的模式,不过我使用的是一个更好的方式。

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.

当对象的第一个请求被创建,创建对象并从文件中读入。

When the first request for the object is made, create the object and read in from a file.

使用getter显示数据。

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天全站免登陆