Size: a a a

2020 April 16

БС

Байт Словович in rannts
Kirill (Cykooz) Kuzminykh
Про типы данных и конфиги я для себя решил, что это ничем не отличается от входящих параметров web-API вызова от клиента. И работать с этим надо точно так же:
- надо в коде описать схему параметров для каждого отдельного приложения в проекте;
- схема определяет типы данных, ограничения, валидацию, дефолтные значения, хелп-тексты и всё остальное, что можно описать в разных реализациях схем/десериализаторах;
- пишется "бекенд", который читает конфиг от куда либо: ini, yaml, xml, json или из базы данных и применяет к ним схемы для десериализации и валидации. Это почти полностью решает проблему с типами - если в схеме требуется строка, то десериализатор вернёт всегда строку, даже если ему подсунули число.
- по красоте можно написать генератор документации, который по схемам сгенерит доку для конфига (в схеме есть уже всё, даже хелп-тексты).
- ещё более крутая красота - автоматом генерить админку для конфига на основе схем. Это полезно когда конфиги лежат в базе, хотя и редактировать файлы админкой, никто не мешает.

Может кто видел dconf в линуксах. Там как мне кажется подобная штука - GUI редактор явно от куда-то берёт схемы для настроек где есть всё и описание и типы и всё остальное.
это интерпрайзный подход. Требует слишком много телодвижений.. Тебе и схему определять надо и кучу всего..
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Ну значит клоудайк - это уже интерпрайз, т.к. прям хочется вот всего этого ибо заколебало
источник

БС

Байт Словович in rannts
а чём проблема? Админы постоянно не правильно конфиги делают?
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Если у тебя везде есть дефолты, то можно вообще обойтись без конфига - схем с дефолтами будет достаточно. Конфиг будет нужен только что бы переопределить дефолты
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Байт Словович
а чём проблема? Админы постоянно не правильно конфиги делают?
Кто-кто?
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Править сложные конфиги через файлы  - это какой-то каменный век.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Зачастую никто толком даже не помнить что и где надо поправить и что вообще есть такая настройка.
источник

БС

Байт Словович in rannts
Как твои схемы помогут решить эту проблему?
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Первое что мы делаем - лезем в исходники и ищем среди кучки конфигов нужную настройку
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Из схем я могу GUI админку генерить автоматом
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
И забыть как страшный сон редактирование текстовых конфигов через ssh
источник

БС

Байт Словович in rannts
Как гуи поможет найти нужный конфиг? Там даже ctrl+f не будет работать
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Точно так же как и сейчас - там же дерево "конфиг-файл с именем приложения -> секция с именем приложения -> разные разделы, которые отвечают за разные настройки приложения"
источник

БС

Байт Словович in rannts
Kirill (Cykooz) Kuzminykh
И забыть как страшный сон редактирование текстовых конфигов через ssh
конфиги обязаны быть в git е и автоматически расскатываться. Да инсталяционные конфиги не должны лежать рядом с кодом, ибо там пароли от базы данных лежат, наприме. Но в любом случае конфиг это часть инсталяции и никаких ручных модификаций быть не должно.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Два-три клика и ты уже видишь все настройки нужного приложения
источник

БС

Байт Словович in rannts
почему нельзя тоже самое сделать на файловой системе и найти нужный конфиг приложения?
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Байт Словович
конфиги обязаны быть в git е и автоматически расскатываться. Да инсталяционные конфиги не должны лежать рядом с кодом, ибо там пароли от базы данных лежат, наприме. Но в любом случае конфиг это часть инсталяции и никаких ручных модификаций быть не должно.
Это всё не отменяет того, что нигде нет формального описания того что должно быть в конфиге, и как правильно его заполнять и менять
источник

БС

Байт Словович in rannts
Не знаю как у тебя, но у меня конфиги по несколько тысяч значений включают. Я не представляю как это формально описать.
И вроде ни у кого нет проблем найти нужное значение и как его определить.
Ну иногда спрашивают можно ли поменять что либо, и я как автор кода, лезу и смотрю какой конфиг отвечает за это и сообщаю..
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Тут два варианта:
- Человеки умные (да, да, мы в это верим) и всегда будут правильно писать все парамтеры в конфиге. Тогда Ок - садим админа на раскладку и редактирование текстовых конфигов. И этот админ будет периодически долбить разработчиков, что бы они ему рассказали как делать правильно и есть ли вообще такая настройка.

- Человеки дураки, и за ними надо всё перепроверять. И тут либо ты сам в каждом месте где нужны параметры из конфига пишешь пачку if-чиков, либо берёшь готовый десериализатор-валидатор и пилишь на нём схемы.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Это тут просто все "объелись" питона и от слова "схема" у них внутри "Лень" начинает ворочаться. А вы представьте как это всё работает на языках со статической типизацией. Там ведь вообще никуда без этого, там даже на конфиги придётся писать схему. Или явно писать в нужных местах "дай_мне_число()", что не очень продуктивно.
источник