Re[4]: Передача лога о выполняемых действиях из подчиненного
От: es3000  
Дата: 24.05.19 09:12
Оценка:
Б>Зависимость должна идти в одну сторону
Б>Главная форма -> Презентер -> Контроллер
Б>В обратную сторону — только сообщения/события

Б>Поэтому контроллер не должен вызывать методы презентера

Б>Наоборот, презентер должен понять, что операция завершена и сделать обновления формы
Б>Понять может либо дождавшись окончания выполнения метода контроллера, либо получив сообщение от контроллера.

А разве передача обратно сообщения\события — это не зависимость?
По сути это — вызов в обратную сторону — обращение к интерфейсу Объекта1 со стороны подчиненного Объекта2.

И если в случае синхронного обращения к подчиненному объекту ответ можно получить как возврат от вызываемой функции.
То в случае асинхронного обращения, подчиненный объект никак по другому не может передать результат, кроме как вызвать некий интерфейс, принадлежащий вышестоящему классу.
Отредактировано 24.05.2019 9:21 es3000 . Предыдущая версия .
Re[4]: Передача лога о выполняемых действиях из подчиненного
От: es3000  
Дата: 24.05.19 09:22
Оценка:
Б>Этот контроллер не делает ничего полезного, только передает сообщение следующему классу.
Б>Думаю, стоит объединить эти два класса в один класс — АсинхроннаяОбработкаКасс

В принципе правильно.
Но его работа в том и заключается, чтобы получить асинхронные ответы от Бизнес-слоя и передать слою Интерфейса уже в синхронном режиме.
Re[4]: Передача лога о выполняемых действиях из подчиненного
От: es3000  
Дата: 24.05.19 09:23
Оценка:
E>>Класс БЛ "Операция с кассой" (базовый):
E>> — хранит Результат (в зависимости от операции есть дополнительные реквизиты у результата)
E>>Класс БЛ "Выгрузка в кассу" — наследник "Операция с кассой""
E>> — реализуют конкретную операцию — выгрузка (или загрузка)

Б>Лучше результат операции хранить отдельно от самой операции. Т.е. создать класс для хранения результата.

Б>Метод класса должен возвращать результат операции, а у тебя почему-то наследование от "результата операции".

У меня сделан отдельный класс для результата, просто я не стал это уточнять.
Класс "БЛ Операция с кассой" имеет ссылку на объект "Результат операции".
Наследники класса "Операция..." создают в конструкторе и содержат наследника от класса "Результат...".
От базового "Результата..." наследуются другие "Результаты...", эти наследники содержат более подробную информацию, соответствующую конкретной операции.
Но сам объект конкретного результата хранится в конкретной "Операции".

И мне кажется неудобно возвращать "Результат" через функцию.
Хранить то его все равно где-то надо.
А хранить где-то в другом месте, не связанном с "Операцией", — не логично.
Отредактировано 24.05.2019 9:25 es3000 . Предыдущая версия . Еще …
Отредактировано 24.05.2019 9:25 es3000 . Предыдущая версия .
Re[9]: Передача лога о выполняемых действиях из подчиненного
От: es3000  
Дата: 24.05.19 09:45
Оценка:
А>Если протоколирование работы касс — важная часть проекта, то надо повысить его из диагностических/отладочных средств.
А>Ввести как компонент бизнес-логики со всеми соответствующими взаимодействиями с DAL.

А>Может быть, что в результате и различные аналитические отчеты будет проще строить.

А>Например, если все записи лога хранить в одной таблице РСУБД, то можно будет удобно строить выборки по одной кассе, нескольким, всем...
А>С несколькими лог-файлами было бы сложнее и реализовывать пришлось бы врукопашную.

Хорошая мысль, спасибо!
Подумаю об этом, надо "переварить".
Re[2]: Передача лога о выполняемых действиях из подчиненного уровня
От: es3000  
Дата: 24.05.19 09:49
Оценка:
E>>А модуль "Работа с файловой системой" вообще не должен знать ни о каких специальных классах вышестоящих модулей.
_>???

Вот, выше объяснил:
http://rsdn.org/forum/design/7452562.1
Автор: es3000
Дата: 24.05.19


E>>Как лучше сделать?

_>Закажите ПО на стороне

Как лучше сделать самому?
Re[8]: Передача лога о выполняемых действиях из подчиненного уровня
От: es3000  
Дата: 24.05.19 09:54
Оценка:
Q>>Мало ли библиотек, где в callback нет пользовательских параметров.
Pzz>Ну в общем-то мало, да. Потому что совершенно непонятно, как ими пользоваться, если в каллбеке невозможно понять, к чему этот каллбек относится.

callback — это же применяется чисто в функциональном программировании.
Аналог callback-а в ООП — это обработчик события?
Правильно я понимаю?

Pzz>Именно поэтому не надо так делать.


Там два способа перечислено.
Как не надо делать? Какой из них? И почему?
Re[5]: Передача лога о выполняемых действиях из подчиненного уровня
От: Буравчик Россия  
Дата: 24.05.19 10:10
Оценка:
Здравствуйте, es3000, Вы писали:

E>Только в случае обмена с кассой здесь надо сделать журналирование и в системный журнал и в журнал, имеющий отношение к конкретной кассе.


Сделай CompositeJournal(IJournal), который будет писать сразу в два журнала MemoryJournal и SystemJournal.
Некоторые части приложения будут передавать в MyFileSystem журнал CompositeJournal, некоторые SystemJournal, некоторые MemoryJournal
Best regards, Буравчик
Re[5]: Передача лога о выполняемых действиях из подчиненного
От: Буравчик Россия  
Дата: 24.05.19 10:16
Оценка:
Здравствуйте, es3000, Вы писали:

E>А разве передача обратно сообщения\события — это не зависимость?


С точки зрения легкости поддержки кода — нет, не зависимость.

E>По сути это — вызов в обратную сторону — обращение к интерфейсу Объекта1 со стороны подчиненного Объекта2.


Обращение не к интерфейсу Объекта1, а к интерфейсу обмена сообщениями (см. Observer).
Т.е. не идет прямая работа с Объектом1, вместо него может быть объект10 (абсолютно не совместимый с Объектом1).
Best regards, Буравчик
Re[9]: Передача лога о выполняемых действиях из подчиненного уровня
От: qaz77  
Дата: 24.05.19 14:39
Оценка:
Здравствуйте, es3000, Вы писали:

E>Как не надо делать? Какой из них? И почему?


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

Конкретных решений может быть множество в зависимости от постановки задачи.

Можно представить себе ситуацию, когда мы хотим получать лог в разрезе одной функции.

Например, какая-то высокоуровневая функция бизнес-логики может завершится с успехом, несколькими не фатальными ошибками или с фатальной ошибкой (исключением).
Также функция формирует информационный протокол работы (наряду с не фатальными ошибками, регистрирует сообщения).
В случае исключения — все понятно, функция ничего не возвращает, исключение летит выше по стеку вызова.
Как возвращать полезный результат (payload), статус (полный успех или были не фатальные ошибки) и записи протокола?
Можно, к примеру, использовать какой-то tuple как возвращаемое значение функции.
Re[10]: Передача лога о выполняемых действиях из подчиненного уровня
От: es3000  
Дата: 25.05.19 17:32
Оценка:
Q>Например, какая-то высокоуровневая функция бизнес-логики может завершится с успехом, несколькими не фатальными ошибками или с фатальной ошибкой (исключением).
Q>Также функция формирует информационный протокол работы (наряду с не фатальными ошибками, регистрирует сообщения).
Q>В случае исключения — все понятно, функция ничего не возвращает, исключение летит выше по стеку вызова.
Q>Как возвращать полезный результат (payload), статус (полный успех или были не фатальные ошибки) и записи протокола?
Q>Можно, к примеру, использовать какой-то tuple как возвращаемое значение функции.

Что такое "tuple"?
Можно кратко объяснить на примере?
Re[11]: Передача лога о выполняемых действиях из подчиненног
От: Буравчик Россия  
Дата: 25.05.19 20:01
Оценка:
Здравствуйте, es3000, Вы писали:

E>Что такое "tuple"?

E>Можно кратко объяснить на примере?

Это такой объект, который хранит несколько значений (возможно разного типа)
К элементам можно обращаться по их номеру.

Например для хранения 2д-координат можно использовать тупл (int,int), например (5, 8) или (10, -1) — первое значение x, второе y
Для хранения информации о человеке (string, string, int), например ("Петров", "МУЖ", 25) — первое значение фамилия, второе пол, третье возраст

В некоторых языках работа с туплами (кортежами) встроенная, для некоторых приходится писать свой класс/тип.
Best regards, Буравчик
Отредактировано 25.05.2019 20:02 Буравчик . Предыдущая версия . Еще …
Отредактировано 25.05.2019 20:01 Буравчик . Предыдущая версия .
Re[9]: Передача лога о выполняемых действиях из подчиненного уровня
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.05.19 08:33
Оценка:
Здравствуйте, es3000, Вы писали:

E>callback — это же применяется чисто в функциональном программировании.

E>Аналог callback-а в ООП — это обработчик события?
E>Правильно я понимаю?

callback — это когда куда-нибудь передаешь функцию (указатель на функцию, если в терминах C/C++), и ее потом оттуда позовут. Применяется оно много где.

Pzz>>Именно поэтому не надо так делать.


E>Там два способа перечислено.

E>Как не надо делать? Какой из них? И почему?

Не надо превращать логгер в GOD-object
Re[11]: Передача лога о выполняемых действиях из подчиненного уровня
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.05.19 08:37
Оценка:
Здравствуйте, es3000, Вы писали:

E>Что такое "tuple"?

E>Можно кратко объяснить на примере?

tuple — это структура с анонимными полями. Это удобная штука, когда надо хранить/передавать вместе пару-тройку логически связанных значений, и не хочется заморачиваться с именованием полей, потому что короткие имена непонятны, а длинные очень загромождают текст.

В C++ нет встроенных tuple, но есть какая-то темплейтная эмуляция.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.