Свойства Java - выставлять или не выставлять? - PullRequest
5 голосов
/ 04 марта 2010

Это может быть давняя проблема, и я уверен, что у каждого свой путь. Предположим, у меня определены некоторые свойства, такие как

secret.user.id=user
secret.password=password
website.url=http://stackoverflow.com

Предположим, у меня есть 100 различных классов и мест, где мне нужно использовать эти свойства. Какой из них хороший (1) Я создаю класс Util, который загружает все свойства и обслуживает их, используя ключевую константу Такие как : Util - это синглтон, который загружает все свойства и поддерживает вызов getInstance ().

Util myUtil = Util.getInstance();
String user = myUtil.getConfigByKey(Constants.SECRET_USER_ID);
String password = myUtil.getConfigByKey(Constants.SECRET_PASSWORD);
..
//getConfigByKey() - inturns invokes properties.get(..)
doSomething(user, password)

Так что, где бы мне ни понадобились эти свойства, я могу делать шаги, описанные выше.

(2) я создаю значимый класс для представления этих свойств; сказать, ApplicationConfig и предоставить получатели для получения определенных свойств. Так что приведенный выше код может выглядеть так:

ApplicationConfig config = ApplicationConfig.getInstance();
doSomething(config.getSecretUserId(), config.getPassword());
//ApplicationConfig would have instance variables that are initialized during
// getInstance() after loading from properties file.

Примечание. Файл свойств как таковой в будущем будет иметь незначительные изменения.

Мой личный выбор (2) - позвольте мне услышать некоторые комментарии?

Ответы [ 5 ]

2 голосов
/ 04 марта 2010

Сделайте это самым простым способом (класс со статическими значениями):

package com.domain.packagename

public class Properties {
    private static String hostName;
    public static getHostName() { return hostName; }
    private static int port;
    public static int getPort() { return port; }

    public static void load() {
        //do IO stuff, probably
        hostName = ??;
        port = ??;
        //etc
    }
}
1 голос
/ 17 апреля 2010

Ваш вариант (2), чтобы приложение получало звуки лучше и чистее. открытые статические финальные ключи интерфейса были плохим дизайном в Java на протяжении веков.

1 голос
/ 04 марта 2010

Я считаю первый подход более многословным, чем необходимо. (Особенно, если не ожидается, что свойства сильно изменятся.) Кроме того, используя второй подход, вы можете обрабатывать проблемы приведения / типа при загрузке свойств, а не при их использовании.

0 голосов
/ 04 марта 2010

Я не думаю, что есть какое-то существенное преимущество одного метода перед другим, и я не думаю, что решение (1) является более безопасным, просто потому, что оно предоставляет ключ свойства вместо java getter для получения паролей.

Если бы мне пришлось выбрать один вариант, я бы выбрал вариант (2).

0 голосов
/ 04 марта 2010

Полагаю, мой первый вопрос: почему вы хотите создать экземпляр того, что вы говорите, является одиночным (вы упомянули об использовании кода, такого как Util.getInstance ()). У синглтона есть только 1 экземпляр, поэтому вам не следует пытаться создавать несколько копий в вашем коде.

Если данные статичны (как будто это выглядит так), я бы создал синглтон и получил бы значения из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...