
Paul
21.03.2017
12:43:40
А значит и влиять на интерфейс не должны.

Aleh
21.03.2017
12:44:30
поможет только адекватный набор тестов и понятный тест для текущего бага
5 строк и у меня есть падающий тест, который запускается и отрабатывает моментально

Google

Aleh
21.03.2017
12:45:05
я быстро нахожу багу

Paul
21.03.2017
12:45:05
В проде ясен пень логируются только доменные модули

Aleh
21.03.2017
12:45:53
для найденных
и понятный кейс для текущего, чтобы тест добавить

Igor
21.03.2017
12:49:46

Paul
21.03.2017
12:50:57

Aleh
21.03.2017
12:51:08
модули?

Paul
21.03.2017
12:51:16
_log
Ещё и явное прокидывание
Отношение агрегирования между доменным классом и логгером
Это фулл пиздейшн

Google

Paul
21.03.2017
12:52:24
Даже представить себе не могу что-то уровня хромиума с таким подходом
Чтобы какой-нибудь аллокатор затрейсить

Aleh
21.03.2017
12:53:25
ничего не понял)

Paul
21.03.2017
12:55:54
Всегда поражала в людях вот эта способность всё доводить до абсурда. Когда "у нас всё point free" и пишут const props = flip(uncurry(2, compose(map, flip(uncurry(2, get))))) вместо const props = (keys, obj) => map(keys, k => get(k, obj)).
Или когда вот во имя чистоты логгер начинают с верхних уровней вот так прокидывать.
Больные

Sergey
21.03.2017
12:57:16
логгер обычно через сеттер прокидываю, а в конструкторе создаю заглушку в виде NullLogger. ну а на джаве как обычно, через статик

Paul
21.03.2017
12:57:36
Ещё один
Странно, что вы Array всякие не прокидываете

Aleh
21.03.2017
12:57:54

Paul
21.03.2017
12:59:33
как так и как надо?
Как надо уже обговорили: логгер — модуль, которым пользуются все кто хочет, используя лишь интерфейс. Приложение же устанавливает уже реализацию логгера, через который всё и идёт. И тут уже полный контроль: какой модуль пользовался, что передал, с каким уровнем и когда.

Aleh
21.03.2017
12:59:56
а, боже надо было import делать в питоне? Ну очевидно да

Sergey
21.03.2017
13:00:05
ну так приложение и пихает нужный логгер
хочет не пихает

Aleh
21.03.2017
13:00:26
A B C - модули

Paul
21.03.2017
13:00:33

Sergey
21.03.2017
13:00:35
ну и плюс логгеры это часть контейнера, ибо могут юзать всякие редисы и конфиги

Aleh
21.03.2017
13:00:36
я показал, что B и С не должны знать про логгер

Paul
21.03.2017
13:00:43
или пример саркастический был?

Aleh
21.03.2017
13:00:52
исходный видел?

Google

Paul
21.03.2017
13:01:09
Видел где было C(B(A(log))) или что-то вроде

Aleh
21.03.2017
13:01:17
изначально было C(log)

Paul
21.03.2017
13:01:25
А должно быть C()

Aleh
21.03.2017
13:01:25
он в себе уже в B, а тот в A

Paul
21.03.2017
13:06:22
Делал бы не класс, а модуль, в котором он содержится

Aleh
21.03.2017
13:06:34
т.е. А не зависел бы от лога?)

Paul
21.03.2017
13:06:57
С точки зрения бизнес логики лога нет
Поскольку функция утилитарна, связь вообще отмечаться не будет, это бесполезная информация

Aleh
21.03.2017
13:07:06
что значит бизнес-логика лога?

Paul
21.03.2017
13:07:21
Не лога, а приложения
Слушай, а ты серьёзно вот так пишешь?

Paul
21.03.2017
13:08:37
С прокидыванием логгера? В продовском коде, разумеется.

Aleh
21.03.2017
13:08:39
я не логирую ничего в домене

Paul
21.03.2017
13:09:07
Я не говорю о том, что попадает в логи

Aleh
21.03.2017
13:09:21
нет, я от слова совсем, нет никакого log()
есть ивенты, на основе которых модель строится
команды на основе которых действия запускаются

Paul
21.03.2017
13:09:47
Эм, давай более приземлённо

Aleh
21.03.2017
13:09:52
вот они попадают в логи

Google

Paul
21.03.2017
13:10:32
Скажем, вот задача: есть запрос с клиента, в ходе обработки делается ещё 100500 запросов, могут быть вложенные, потом всё дело формируется, шаблонизируется и отдаётся клиенту

Aleh
21.03.2017
13:10:54
а домен какой?)

Paul
21.03.2017
13:11:10
Абсолютно неважно
Обычный сервер

Aleh
21.03.2017
13:11:23
суть в том, что мне важен домен
а инфраструктура ляжет потом как будет удобно

Paul
21.03.2017
13:11:37
Нужно: иметь трассировку запросов (какие когда выполнялись в ходе обработки запроса от клиента, сколько времени ушло, какие ответы), логирование ошибок с разных уровней, логирование времени шаблонизации
Вот давай на этом примере

Admin
ERROR: S client not available

Paul
21.03.2017
13:12:04
У нас разное определение инфраструктуры?

Aleh
21.03.2017
13:12:15
инфраструктура это часть кода
запросы в базу - инфраструктура
логирование - инфраструктура

Paul
21.03.2017
13:12:27
Значит и вызов log() инфраструктуру

Aleh
21.03.2017
13:12:29
io - инфраструктура короч

Paul
21.03.2017
13:12:30
Ну и отлично

Aleh
21.03.2017
13:12:36
а домен - расчет скидки

Paul
21.03.2017
13:12:39
Это очень странное определение

Aleh
21.03.2017
13:12:43
определение диагноза пациенту

Google

Paul
21.03.2017
13:12:45
Скажем так, ты единственный кто так считает
ну да ладно, плевать
Не-не, подожди
Я уже пример привёл
Он довольно прост: обычный сервер

Aleh
21.03.2017
13:13:06
@fes0r @Enleur расскажите про ваше видение инфраструктуры :)

Paul
21.03.2017
13:13:39

Sergey
21.03.2017
13:14:11

Paul
21.03.2017
13:14:38
С таким определением-то конечно

Aleh
21.03.2017
13:15:02
надо логировать - логирую

Paul
21.03.2017
13:17:20
Прокидываешь сверху вниз логгер?

Aleh
21.03.2017
13:17:46
в жаве\пыхе это сделает за меня контейнер

Sergey
21.03.2017
13:18:30
в жаве у тебя логгер статический будет
если какой-нибудь slf4j

Aleh
21.03.2017
13:18:57
и завернут в адаптер)

Sergey
21.03.2017
13:19:56
ООП не нужен. Только ПКБ. Нашли о чем спорить

Paul
21.03.2017
13:20:10
ПКБ?

Aleh
21.03.2017
13:20:30
да, что такое пкб?