169 похожих чатов

Вопрос по организации кода. Пилю свой велосипед логгер Есть у меня

множество уровней сообщений. Я набрасываю сообщения в стринглист, а когда они нужны, вызываю их через функцию Text и указываю какие уровни показать.
Структура проекта примерно такая:
При запуске главной формы, создаётся ядро, ядро создаёт логгер и остальные модули.
Модули скидывают сообщения логов в ядро, ядро их кладёт в логгер, а главная форма по необходимости дёргает из него текст и показывает в мемо.
При отправке сообений лога, они помечаются одним из элементов множества
TLevel = (LUART, LCONSOLE, LUSER, LCOMMON, LERRORS, ALL);
которые описаны в модуле логгера.
И тут возникает вопрос. Получается, что не достаточно прописать всем модулям в юсес ядро (там процедура, которая перебрасывает сообщения в логгер), нужно ещё и логгер туда прописать.
Хз на сколько это правильно. Как тут лучше поступить?
Забить и прописать логгер во всех модулях, которые скидывают логи.
Вынести описание TLevel в отдельный модуль и уже его прописывать всем заинтересованным.
Вынести описание TLevel в ядро. Но тогда у ядара будет в юсесах логгер, а у логгера ядро, вроде как это не правильно.
Забить на отдельный тип данных, и передавать уровни цифрами. Ввести константы типа LUART=1 LCONSOLE=2 итд, и использовать их.

21 ответов

53 просмотра

Ну для этого придумали enum, типа type TLogLevel = (llInfo, llWarn, llError etc) ну и если он у тебя в type модуля прописан, то должен везде подхватываться

Serjone- Автор вопроса
Александр В
Ну для этого придумали enum, типа type TLogLevel =...

напрямую модуль логгера не подключен в другие модули. Он какбы через прокладку работает. Поэтому этот тип в других модулях не виден

Вынеси tlevel в свое "ядро" а в логгере разреши циклическую ссылку на ядро в имплементации. Если уж так не хочется отдельный модуль с tlevel делать и везде его заюзывать

Михаил Усков
Вынеси tlevel в свое "ядро" а в логгере разреши ци...

ай яйяй ненадо циклических ссылок на ровном месте

Serjone
напрямую модуль логгера не подключен в другие моду...

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

Serjone- Автор вопроса
zamtmn
ай яйяй ненадо циклических ссылок на ровном месте

Да все можно, если осторожно.... Для того (а не для скорости компиляции, как тут некоторые спорят) и нужны uses в имплементации. Ну и...Это учебный логгер, можно делать как угодно.

Стикер

Я бы создал отдельный модуль с интерфейсом, а в ядре реализовать этот интерфейс. В других модулях подключать вместо ядра модуль с интерфейсом. TLevel можно кинуть в отдельный модуль, всем его указывать в uses если это необходимо. Не вижу тут проблемы.

Дмитрий Логинов
Я бы создал отдельный модуль с интерфейсом, а в яд...

Так у него есть исходники моего логгера, в которых именно так и сделано

Поскольку у тебя прокси-функция логгера уже защита в "ядро", значит у тебя ядро от логгера зависит. Почему бы просто не добавить в ядро ещё и прокси типа? Unit ядро; Interface uses логгер; Type TLevel = логгер.TLevel;

Nik
Так у него есть исходники моего логгера, в которых...

Моё сообщение было больше про организацию кода, а не про логгер. Выделение в отдельный модуль интерфейса общения с "ядром" позволит избавиться от перекрестных ссылок (а от них избавляться нужно, уж больно много гемороя они доставляют).

Дмитрий Логинов
Моё сообщение было больше про организацию кода, а ...

У меня интерфейс логгера выделен в отдельный юнит ) Так что всё верно в том сообщении )

Serjone- Автор вопроса
Serjone
Так можно было? 😳

А ты сделай uses windows; var r: trect; А потом ctrl-клики на trect и посмотри как оно определяется. В лазаре, кстати, есть проблемы как раз когда одни и те же майкросотовские типы снова и снова определяются в разных модуля и для компилятора это разные, несовместимые типы.

Arioch The
Поскольку у тебя прокси-функция логгера уже защита...

какой в этом смысл? всеравно неявная зависимость от логгера, тогда уже делать ее явной

Serjone
Так можно было? 😳

Вообще, я же могу написать вот такие вызовы процедур? Windows.DeleteFile('1.txt'); SysUtils.DeleteFile('1.txt'); Могу. И вряд ли я сейчас кого-то удивил. А чем отличаются типы??? Там все то же самое

Arioch The
А ты сделай uses windows; var r: trect; А потом ct...

они несовместимые только если через type определены, иначе это тотже самый тип емнип

zamtmn
они несовместимые только если через type определен...

Нет,именно сто там копипастом снова и снова... В дельфе на трахались, вынесли в types и всех остальных через него маршрутизировали. Казалось бы хорошо известный и базовый приём. Странно...

zamtmn
какой в этом смысл? всеравно неявная зависимость о...

Не знаю. Он пишет, ему виднее. Даже банальное "мне так комфортнее" например

Похожие вопросы

Обсуждают сегодня

Кто нибудь из участников чата пишет на ассемблере под GNU/Linux?
Spiker01
24
анрей С какой целью зашёл?
КТ315
42
я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
15
Я не очень много работал с потоками, тут возник вопрос - если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?
The Bird of Hermes
25
Слушайте, никак не могу заставить работать сортировку в TClientDataSet! Вроде все делаю правильно, создаю индекс, присваиваю его название ClientDataSet1.IndexName, первый раз...
Ivan Burnatov
7
а вот интересный вопрос появляется: допустим у нас есть приложение с системой модулей. Будет ли считаться система модуль+прога ассемблерной программой если: а) Прога на Си, м...
Mixail Frolov
29
я в заголовке имплементировал функцию. В заголовке стоят гарды. Но я все равно получаю multiple definitions. Как это может происходить?
Павλо 🇺🇦
15
как можно вывести первые 100 символов поля content на странице?
Artem
10
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Может кто встречал такое? Один набор данных, но в одном столбце кодировка нормальная, а в другом ироглифы. Как такое может быть?
Alexander
23
Карта сайта