Re: Передача лога о выполняемых действиях из подчиненного уровня
От: Буравчик Россия  
Дата: 22.05.19 16:15
Оценка:
Здравствуйте, es3000, Вы писали:

E>Проблема в том, что обработка обмена реализована несколькими классами, которые вызывают друг друга.

E>Я разбил все классы на уровни, основные уровни: UI, Бизнес-логика, Обмен с кассой в конкретном формате.
E>И получилась большая "глубина" вызовов.
E>Например:
E>класс "Главная форма" -> презентер -> контроллер "Обработка списка касс" — > класс бизнес-логики "Операция с кассой" -> класс "Обмен в формате ХХХ" -> Работа с файловой системой и т. д.
E>То есть самый "глубокий" класс ничего не знает о самом верхнем классе (о Главной форме), в который надо передать лог-журнал.

Что делает каждый из этих классов в цепочке? Для чего они нужны, каковы их обязанности?
Что они принимают на вход и какой результат возвращают?

E>Кроме того, при работе "внутренних" классов и модулей могут возникать исключения.

E>Эти исключения должны перехватываться, и также записываться в этот "вышестоящий" журнал.
E>А также, чисто теоретически, все это может выполняться в многопоточном режиме и причем с разных рабочих мест.

Исключения — обрабатывать. Для многопоточного режима — создать особый, МногопоточныйЖурнал (реализация IЖурнал, см. ниже)

E>Как это делается?


"Обмен в формате ХХХ" в любом случае должен вернуть статус операции ("Успех/Отказ")

Что касается журнала, то два варианта:
Можно договориться, что при вызове "Обмен в формате ХХХ" должен возвращать журнал (список строк) наряду со статусом операции

Можно наоборот передать класс Журнала (реализация IЖурнал) в класс "Обмен в формате ХХХ" и договориться, что если понадобится куда-то что-то вывести, то он будет использовать переданный журнал. Затем сделать ФайлЖурнал, который реализовывает IЖурнал, если нужно вести журнал в файле. Или сделать ПамятьЖурнал, который реализовывает IЖурнал, если нужно вести журнал в массиве строк. А может ОблакоЖурнал, который хранит журнал в облаке.

Таким образом у тебя уйдет зависимость "Обмен в формате ХХХ" от файловой системы. С другой стороны, ты сможет работать хоть с файлами, хоть с облаком, хоть с памятью.

E>Самое простое — это передавать объект ResultArray в качестве параметра во все вызываемые методы.

E>Но это очень не удобно.
E>Так как например модуль "Обмена в формате ХХХ" уже написан, менять все методы неохота.

Достаточно вывод в файл заменить на вывод в IЖурнал.

E>А модуль "Работа с файловой системой" вообще не должен знать ни о каких специальных классах вышестоящих модулей.


О классах знать не должен, а о простых интерфейсах — может.
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.