|
|
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Добрый день! Всё что ниже- это расуждения, никак не руководство "бежать и делать". Хотя бы потому, что не исправлена критичная бага для выполнения этого. Возникла такая мысль- все эти properties (даже если они yaml) - это костыль. Почему? Потому что теряется вся прелесть статически типизированного языка. Я могу ошибиться в имени и не заметить этого- IDEA часто не видит использования проперти, если она в другом модули, поэтому она не помошник, а eclipse/netbeans вроде этого вообще не умеют. Могу ошибиться в типе (да хоть ввести 1.3е10 с русской "е"). А что вместо? А например kotlin-script. В коде описываем классы с параметрами (каждый модуль- свои), потом приложение описывает мега-класс со ссылками на все возможные параметры, пишем неболшую обёртку и далее в .kts-файле пишем примерно так Код: sql 1. 2. 3. 4. 5. 6. 7. В т.ч. можно и лямбды писать (чего в конфигах нет вообще). Далее выполняется конфиг и на выходе получаем готовый объект с параметрами, которые можно передавать тому же guice/springio Интересно послушать умные мысли, как за, так и против. --<br /> Алексей.<br /> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 10:11 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Почему не груви? В целом же - полностью поддерживаю инициативу. Сам в поисках подобного решения. Основная проблема в использовании языка это относительно строгий синтаксис, который легко могут нарушить не достаточно технически подкованные пользователи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 16:13 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПочему не груви? А что толку от груви? Нет проверки типов. Closure надо конвертировать. Плюс один - вместо любого значения можно вставить Closure. Но что-то я боюсь такой гибкости. У нас уже есть конфиг в груви для специальной части кода- но я жду kotlin 1.1.2 чтобы заменить на котлин-скрипт. После появления kotlin и kotlin-script я не вижу смысла в groovy вообще. И не только я- kotlin-script задействовали вместо груви в spring-boot и gradle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 16:51 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Была похожая тема уже. Делал как-то так: #19518406 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2017, 10:52 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, а мне нравится подобная идея, единственное нужно по тестить, на сколько eclipse понимает kotlin и mixed проект из Java/Kotlin, в IJIDEA думаю все идеально должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2017, 12:22 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Приблизительно такой же подход используется в http://bootique.io И без всяких котлинов, грувей и прочей лабудени (хотя интеграция с Kotlin есть из коробки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2017, 19:50 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Andrei TПриблизительно такой же подход используется в http://bootique.io И без всяких котлинов, грувей и прочей лабудени (хотя интеграция с Kotlin есть из коробки) Ничего общего. Можно в конфиге что угодно написать- ниаой обратной связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2017, 21:57 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, В bootique 4 уровня конфигурации: - CLI (переменные среды) - JVM параметры - файл конфигурации (YAML, JSON, возможность подключения кастомных форматов) - программный код в Guice-модуле -- это то, о чем пишите вы в исходном посте, если я правильно понял Подобный подход реализован в аналогичных проектах Spring и Dropwizard. По принципу "чем больше уровней конфигурации, тем лучше". С типизацией проблем никаких нет -- большие куски конфигурационной логики размещаются в DI в виде кода, а отдельные параметры сеттятся/инжектируются в параметры конструкторов/методов или поля классов, и соответвствие типов проверяется рантаймом (YAML и JSON поддерживают типы, а конвертацией строковых CLI и JVM параметров занимается фреймворк). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 01:20 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Andrei TAlexey Tomin, В bootique 4 уровня конфигурации: - CLI (переменные среды) - JVM параметры - файл конфигурации (YAML, JSON, возможность подключения кастомных форматов) - программный код в Guice-модуле -- это то, о чем пишите вы в исходном посте, если я правильно понял Подобный подход реализован в аналогичных проектах Spring и Dropwizard. По принципу "чем больше уровней конфигурации, тем лучше". С типизацией проблем никаких нет -- большие куски конфигурационной логики размещаются в DI в виде кода, а отдельные параметры сеттятся/инжектируются в параметры конструкторов/методов или поля классов, и соответвствие типов проверяется рантаймом (YAML и JSON поддерживают типы, а конвертацией строковых CLI и JVM параметров занимается фреймворк). Типы они-то поддерживают, но не проверяют, как и имена. А DI-код компилируется при сборке. Вообще у нас подход такой- если конфиг правит разработчик- тут всё просто- можно и офмф-код. Если онбордер- он делает merge-request (ну или patchset в gerrit) и одновременно копипастит это либо в (самописный) UI для puppet'а, либо в consul. Приложение при рестарте (или по таймеру) подхатывает изменения- и тут никакие DI уже не катят. Я хочу, чтобы онбордер правил конфиги в проекте (с полной проверкой всего IDEA) и подкладывал изменения в нужный UI. Если это java-код, то надо либо писать многобукв (что тяжело), либо копипастить фрагменты (что чревато ошибками), либо groovy/kts. В одном из проектов сделали groovy для _некоторых_ конфигов (там нужно в конфиге писать функции), теперь жду kotlin 1.1.2 для перевода в kts всего этого. Но я задумался, что может писать _все_ конфиги в kts. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 07:26 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
На мой взгляд, скриптовые конфиги - это путь в никуда. Конфиг - это набор данных, специфичных для конкретного окружения. Идеальный (имхо) конфиг - это переменные окружения :) Если дать возможность в конфиге писать логику, она там очень скоро появится... Получим логику, специфичную для окружения. А это рай для админов и ад для разработчиков, которые продукт поддерживают. Есть похожий пример из соседней области - gradle. На моей памяти любой большой проект на грэдле быстро превращается в "ant" с кучей императивщины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 07:41 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
PS. Не понимаю ажиотажа вокруг kotlin. Были уже Xtend и Ceylon в той же категории, оказались особо не нужны. Кроме как популярностью Idea и агрессивным маркетингом Jetbrains не могу объяснить хайп вокруг котлина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 07:44 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, Теперь я понял, о чем вы говорите. Проблема опечаток и ошибок действительно существует. В приложениях мы ее решаем с помощью Ctrl+C/Ctrl+V, возможностей текстового редактора по автоматической смене регистра, ну и, конечно, такого именования параметров, когда тип более-менее понятен из названия. Если тип не понятен, сверяемся с кодом или авто-собираемой схемой конфигурации приложения (фича Bootique). Т.е. сводим к проблеме дисциплины и чистого кода. Идея валидации конфига в compile-time звучит очень интересно. У нас файл конфигурации используется только в приложении для определения дефолтных настроек и упаковывается вместе с приложением в jar. Отдельные параметры специфичные для среды или сценария запуска (обычно это простые значения: логины, пароли, хосты/порты и т.п.) переопределяются через JVM/CLI. Т.е. файл в нашем случае - это аналог вашего "мега-класса", доступ к нему осуществляется только из IDE, и, действительно, было бы логично иметь какой-то статический валидатор. Если позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 10:59 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Andrei TЕсли позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции? А это и есть тот баг, который поправили в 1.1.2 (жду выхода). import (своих классов) в 1.1.1 работает в IDEA, но не работает в maven (gradle/bazel не проверял). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 12:50 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
ДиезPS. Не понимаю ажиотажа вокруг kotlin. Разработка ПО (включая разработку языков) это тонкий баланс между кучей разных крайностей. На мой взгляд из существующих статически-типизированных ООП языков kotlin лучше всего выдерживает баланс. java - просто пример "как делать не надо", ceylon слился в экстазе с jboss (тащит их либы), плюс баги (кто пробовал- говорит их мбольше) scala потеряла простоту и обзавелась кучей непонятных закоулков и способов выстрелить в ногу. Ну и да, возможность обсудить с автором языка почему что и как было сделано- это существено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 12:53 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, STS + SpringBoot + starters и не занимаешься той ерундой которая описана выше в по топику. Один файл настроики и все. Ну если хочешь свой лог писать то указываешь где log.xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 12:59 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey TominAndrei TЕсли позволите, вопрос по вашему подходу. Есть ли возможность использовать собственные типы, или только стандартные + коллекции? А это и есть тот баг, который поправили в 1.1.2 (жду выхода). import (своих классов) в 1.1.1 работает в IDEA, но не работает в maven (gradle/bazel не проверял). Отлично! Есть ли поддержка полиморфизма? Скажем, есть настроечный параметр "Коннектор", в приложении это будет некий интерфейс Connector; в конфиг-модуле будет несколько параметров типа Connector. Для разных параметров коннектор может быть разного типа: jdbc, file, http и т.п. Интересует вот что: 1) поддерживаются ли в принципе такие параметры, которые объявлены в Java-коде как имеющие абстрактный тип? 2) если да, то умеет ли обсуждаемый механизм валидировать такие параметры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 13:10 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
И вдогонку второй вопрос. С какой степенью гранулярности осуществляется переопределение параметров? Могу ли я переопределить одно поле параметра составного типа, или потребуется переопределять весь параметр целиком? Можно ли переопределить значение ключа в словаре (если есть поддержка Map)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 13:12 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Andrei TЕсть ли поддержка полиморфизма? Скажем, есть настроечный параметр "Коннектор", в приложении это будет некий интерфейс Connector; в конфиг-модуле будет несколько параметров типа Connector. Для разных параметров коннектор может быть разного типа: jdbc, file, http и т.п. Интересует вот что: 1) поддерживаются ли в принципе такие параметры, которые объявлены в Java-коде как имеющие абстрактный тип? 2) если да, то умеет ли обсуждаемый механизм валидировать такие параметры? Всё есть. Можно считать, конфиг kts- это код на kotlin. Отличие только в том, что kotlin-script это скрипт :) который удобнее выполнять в runtime без вызова javac или других компиляторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 15:19 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey TominДобрый день! Всё что ниже- это расуждения, никак не руководство "бежать и делать". Хотя бы потому, что не исправлена критичная В т.ч. можно и лямбды писать (чего в конфигах нет вообще). Далее выполняется конфиг и на выходе получаем готовый объект с параметрами, которые можно передавать тому же guice/springio Интересно послушать умные мысли, как за, так и против. Прошу прощения, я лично против. По большому в spring-е сейчас никто не мешает делать конфигурирование ч/з Java. А переносить часть логики в конфиги вне ЯП... по мне это плохое решение. По мне .propertues, .yaml, .json достаточно для хранения изменяемых параметров/констант. А их проверку/логику выносить в Java-конфиги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 15:20 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey TominДиезPS. Не понимаю ажиотажа вокруг kotlin. Разработка ПО (включая разработку языков) это тонкий баланс между кучей разных крайностей. На мой взгляд из существующих статически-типизированных ООП языков kotlin лучше всего выдерживает баланс. java - просто пример "как делать не надо", ceylon слился в экстазе с jboss (тащит их либы), плюс баги (кто пробовал- говорит их мбольше) scala потеряла простоту и обзавелась кучей непонятных закоулков и способов выстрелить в ногу. Ну и да, возможность обсудить с автором языка почему что и как было сделано- это существено. Оффтоп, конечно.. ну да ладно, пятница ) На мой взгляд, в реальной жизни приживаются именно крайности - какие-то явные преимущества, которых нет у других решений. Scala - полноценная функциональщина, Groovy - полноценная динамика, Clojure - мощное метапрограммирование. А Kotlin что дает по сравнению с Java? Синтаксический сахар и немного защиты от NPE... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 21:53 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Usman @ConfigurationProperties / @PropertySource Alexey TominМогу ошибиться в типе (да хоть ввести 1.3е10 с русской "е")Будет ошибка: Код: java 1. Ошибка будет также в случае несуществующего имени свойства (опечатка и пр.). Все ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2017, 22:04 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, можно порассуждать на тему - зачем вообще нужны конфиги. Если у нас есть язык который будет над-множеством грамматики над конфигами - тогда теряется различие между кодом и данными. С этой точки зрения кусок кода на lisp (только для примера) Код: javascript 1. 2. 3. 4. можно толковать как код и как DSL. Разница только в том через какой инструмент мы на него посмотрим. Я какое-то время создавал на проекте "идеальный" конфигуратор. И когда я понял что через java-рефлексию я создаю экземпляры классов из .properties то я задумался - а зачем тогда вообще нужен умный конфигуратор - если язык всеравно умнее. Что мы пытаемся кому-то доказать создавая умные конфигурации? Нет-ли в этом ловушки или парадокса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 01:17 |
|
||
|
Размышления на тему конфигов
|
|||
|---|---|---|---|
|
#18+
Alexey TominЯ могу ошибиться в имени и не заметить этого- IDEA часто не видит использования проперти... А что вместо? А например kotlin-script. Пользоваться IDEA вообще нецелосообразно (это коммерческое IDE хуже бесплатных), поэтому отдельные его недостатки несущественны. Но совсем неправильно предлагать идеи для их исправления. Это на руку новым русским - "хозяевам" фирмы JetBrains (идиотское название, ну не буду сейчас насмехаться). Эти личности плохо себя ведут: скрывают российское происхождение фирмы, ничего не сделали для российских пользователей: ни скидки не дали для своих, ни интерфейс не русифицировали. Как-то выпустили книгу по IDEA 4.5... как раз перед выходом 5. Потом я видел жалобу одного из авторов книги: её экземпляр авторам не подарили, а предложили купить. Эти новые русские просто обезумели от жадности. Помогать им - себя не уважать. Не знакомился с Kotlin и не буду: отталкивает непристойное происхождение от этой фирмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 09:32 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39426481&tid=2123029]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 406ms |

| 0 / 0 |
