Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Текстовые значения в коде / 18 сообщений из 18, страница 1 из 1
11.07.2019, 10:40
    #39836210
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
Всем привет!

Есть код, в котором много текстовых значений:

- kUrl = "activeMQ.url" - используется как ключ в Map структуре messageServiceConfig, которая содержит в себе данные из файла properties key=value
- exConnectionStarted = "Connection has already started" - описание для Exception
Причем некоторые текстовые значения используются в других классах.

Куда эти тексты лучше запихнуть красиво, чтобы избавиться от текста в коде вообще?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public class SingleMessageService {
    
    ...
    private final String kUrl = "activeMQ.url";
    private final String kUsername = "activeMQ.username";
    private final String kPassword = "activeMQ.password";
    private final String kQueue = "activeMQ.queue";
    private final String kMode = "activeMQ.mode";

    ...
    private final String exConnectionStarted = "Connection has already started";
    private final String exConnect = "Failed connect Message Service provider";
    private final String exProducer = "Failed create Producer";
    private final String exNoMode = "Mode is absent";
    private final String exNoQueue = "Queue name is absent";
    private final String exStarted = "Message Service is not connected";
    private final String exClose = "Failed disconnect Message Service provider";
    private final String exSend = "Failed send message";
    private final String exProducerIsNull = "Producer is null";

    ...
    public void connect(MessageServiceConfig messageServiceConfig) {
        if (connection == null) {
            if (messageServiceConfig.getProperties()
                    .containsKey(kUrl)) {
                connectionFactory = new ActiveMQConnectionFactory(
                        (String) messageServiceConfig.getProperties()
                                .get(kUsername),
                        (String) messageServiceConfig.getProperties()
                                .get(kPassword),
                        (String) messageServiceConfig.getProperties()
                                .get(kUrl));
            } else {
                throw new MessageServiceException(exUrlAbsent);
            }
        ...
...
Рейтинг: 0 / 0
11.07.2019, 11:22
    #39836242
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
MolasarКуда эти тексты лучше запихнутьв проекте папку Globals. Туда пакет Globals и статик класс.
...
Рейтинг: 0 / 0
11.07.2019, 11:39
    #39836265
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
Красивость - это не совсем инженерный термин. Обычно преследуются следующие цели.
Выделить все настройки связанные с локализацией в отдельные конфиги (*properties,*yaml, *xml, *json)
Сделать приложение конфигурируемым. Тоесть для того чтобы поменять url или логин не надо
было привлекать разработчика и пересобирать проект.

И прочее.

Какая цель у вас - непонятно.
...
Рейтинг: 0 / 0
11.07.2019, 11:49
    #39836276
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
MolasarexConnectionStarted = "Connection has already started" - описание для Exceptionпочему нет класса ExceptonMy?
...
Рейтинг: 0 / 0
11.07.2019, 12:15
    #39836285
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
Для ошибок можно что то такое сделать:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public enum Errors {
    NO_MODE,
    NO_QUEUE,

    INVALID_PRODUCER,

    START_FAILED,
    SEND_FAILED;

    public String getLocalizedMessage() {
        MessageSource messageSource = MessageSourceHolder.getMessageSource();
        return messageSource.getMessage("your.package.Errors." + name());
    }

}

далее создаешь файл с описанием ошибок errors.properties:
Код: java
1.
2.
3.
your.package.Errors.NO_MODE=Queue name is absent
your.package.Errors.NO_QUEUE=Mode is absent
...

из плюсов, сообщения всех твоих ошибки будут локализованы, и у каждой ошибки будет описание, особенно если ты API предоставляешь кому то еще. Из минусов (MessageSource/ApplicationContext) нужно где то сохранить, чтобы он был доступен через static метод.

авторkUrl = "activeMQ.url" - используется как ключ в Map структуре messageServiceConfig, которая содержит в себе данные из файла properties key=value
как по мне так это лишняя Map (если это не SpringBoot), сделал бы просто:
Код: java
1.
2.
3.
4.
SingleMessageService {
    @Value("${activeMQ.url}")
    private String url;
}
...
Рейтинг: 0 / 0
11.07.2019, 12:31
    #39836301
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
подобные вещи обычно вытаскивают в конфиги. и вместо фактического значения вставляют ссылочное на этот конфиг откуда оно и подгребается. если речь о бэке. и если по-нормальному. по фронту как там у них принятно хз. наверное так же.
...
Рейтинг: 0 / 0
11.07.2019, 12:32
    #39836302
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
а ну вот чел написал проперти файлы. собссно да. это оно и есть. нас двое ))
...
Рейтинг: 0 / 0
11.07.2019, 12:43
    #39836311
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTподобные вещи обычно вытаскивают в конфиги.в файлы конфиги вытаскивают для админов.
Часть можно и в коде. Или константы отменили?
...
Рейтинг: 0 / 0
11.07.2019, 12:59
    #39836321
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
зачем размазывать по коду ровным шпателем?
...
Рейтинг: 0 / 0
11.07.2019, 13:05
    #39836325
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTзачем размазывать по коду ровным шпателем?
У логирования есть уровни.
У ошибок есть уровни
У переменных ес уровни
У констант есть уровни для размещения.
(не надо константы для кода выносить в конфиги)
...
Рейтинг: 0 / 0
11.07.2019, 14:25
    #39836393
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTа ну вот чел написал проперти файлы. собссно да. это оно и есть. нас двое ))
Я тоже "за"!
Уже трое.
...
Рейтинг: 0 / 0
11.07.2019, 14:57
    #39836409
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
Соглашусь с петром.

Есть три типа информации:
1) Конфигурационные параметры - их кладем в properties, они меняются девопсами по необходимости на нужном энвайрнменте
2) Локализационные данные - сообщения об ошибках, UI-лейблы и т.д - кладутся в папку messages - каждому языку по файлу
3) Константы имплементации val regex = "\\w" - их либо держать в классе, где используются, либо заводить Constants.java, на этот счет я иду немного в разрез с общепринятым мнением - и храню в файлах где используются
...
Рейтинг: 0 / 0
11.07.2019, 15:19
    #39836421
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
там явно пункт два из твоего списка
...
Рейтинг: 0 / 0
11.07.2019, 15:25
    #39836425
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTтам явно пункт два из твоего списка
имхо там частично 1) и частично вообще муть - по сути сообщения об ошибках в логе, которые не факт что нужно локализовать и не факт, что нужно выделять в отдельные константы, ибо если в одном месте логгер напишет "Failed create Producer", а в другом "Failed to create Producer" то небо на землю не упадет. Конечно отдельный вопрос с какого одинаковые ошибки в разных местах генерятся и не нужно ли такие места в отдельный код выделить, но допустим.
...
Рейтинг: 0 / 0
11.07.2019, 15:41
    #39836443
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTтам явно пункт два из твоего списка
Это?
Код: java
1.
private final String kUrl = "activeMQ.url";


Не смеши.
...
Рейтинг: 0 / 0
11.07.2019, 15:44
    #39836445
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
PetroNotC SharpandreykaTтам явно пункт два из твоего списка
Это?
Код: java
1.
private final String kUrl = "activeMQ.url";


Не смеши.
это вообще чистый конфиг и ему место в пропертях. то что он так оформил вместо анноташки. ну хз может так задумано. может ему нельзя.
...
Рейтинг: 0 / 0
11.07.2019, 15:53
    #39836452
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
andreykaTчистый конфигкто и когда конфигурирует?
...
Рейтинг: 0 / 0
11.07.2019, 15:57
    #39836456
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовые значения в коде
Тут - какое-то переусложнение? Что это? Конфигурация конфигураций?
Код: java
1.
2.
3.
4.
5.
    private final String kUrl = "activeMQ.url";
    private final String kUsername = "activeMQ.username";
    private final String kPassword = "activeMQ.password";
    private final String kQueue = "activeMQ.queue";
    private final String kMode = "activeMQ.mode";
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Текстовые значения в коде / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]