|
0 / 0 / 0
Регистрация: 22.09.2023
Сообщений: 54
|
|
Clean Architecture. Отображение в пользовательском интерфейсе процесса выполнения длительной бизнес-операции12.09.2024, 12:01. Показов 1275. Ответов 14
Метки нет (Все метки)
Здравствуйте!
Стараюсь написать программу с "правильной" архитектурой. Прочитал про Чистую архитектуру: https://habr.com/ru/articles/499078/ Как я понял, в соответствии с Чистой архитектурой, выходные данные бизнес-операции (Use Case Interactor) при выполнении "возвращаются" в вызывающий слой в виде OutputPort. Но ведь OutputPort "возвращается" при завершении бизнес-операции, через OutputPort возвращаются результаты выполнения. А как сделать, чтобы происходило изменение пользовательского интерфейса именно в процессе выполнения длительной бизнес-операции? Например. Бизнес-операция - это обработка вложенных файлов и папок. Обработка каждой папки достаточно длительная. Нужно, чтобы при выполнении этой операции в окне отображалась таблица с колонками. При начале обработки новой папки\подпапки в таблице должна появляться новая строка и в первой колонке "Имя папки" таблицы отображается имя папки. По ходу обработки папки (при обработке очередного файла в этой папки) во второй колоке "Файл" должна появиться строка "обрабатывается файл ххххх". После обработки всех файлов в колонке таблицы "Результат" должен появиться результат обработки папки. В общем-то по смыслу ничего сложного. Но как это реализовать, придерживаясь принципов Clean Architecture? Что дожлна сделать процедура бизнес-операции, чтобы "сработали" все эти OutputPort, Presenter и т.д., и чтобы в итоге пользователь видел процесс заполнения таблицы? Объясните, пожалуйста. Если можно - покажите какой-нибудь подходящий пример кода.
0
|
|
| 12.09.2024, 12:01 | |
|
Ответы с готовыми решениями:
14
Отображение прогресса выполнения длительной процедуры без многопоточности Clean Architecture (MVP), как обойтись без Context для Data Layer Class в пользовательском интерфейсе |
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||
| 12.09.2024, 16:32 | ||
|
Это общий принцип. Конкретные детали зависят от того, что за UI у Вас. Например, возможно, у Вас будет опрос сервера в цикле (о текущем статусе операции).
0
|
||
|
0 / 0 / 0
Регистрация: 22.09.2023
Сообщений: 54
|
||
| 12.09.2024, 16:51 [ТС] | ||
|
И как надо разделить эти действия между объектами Controller, Presenter? Как я понимаю, моделью в этой программе будут данные о папках, файлах и результатах их обработки. Верно?
0
|
||
| 12.09.2024, 20:44 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.09.2023
Сообщений: 54
|
|||
| 13.09.2024, 08:34 [ТС] | |||
|
А вот более конкретные моменты не понятно как надо делать. Как эту информацию из слоя бизнес-логики передать в вызывающий слой интерфейса? И второй вопрос - мне все-таки хотелось бы это реализовать в рамках "Чистой архитектуры". В вашем примере метод "void RenderFrame( void )" - это UseCase Interactor. А где код, который выполняет роль InputPort и OutpputPort?
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||
| 13.09.2024, 10:29 | |||
|
Добавлено через 2 минуты Добавлено через 4 минуты Возможно, с учётом веб специфики будет проще реализовать функцию, которая выполняет операцию, на клиенте. На сервере будет выполняться отдельный шаг.
0
|
|||
| 13.09.2024, 20:36 | |||
|
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||
| 14.09.2024, 13:10 | ||
|
Уровень данных - "бездумное" сохранение сущности. Уровень бизнес-логики - сохранение сущности с учётом бизнес-правил и инвариантов. Уровень приложения - сохранение сущности, специфичное для данного приложения (включая маппинг сообщений об ошибках и прочее).
0
|
||
|
0 / 0 / 0
Регистрация: 22.09.2023
Сообщений: 54
|
||||
| 16.09.2024, 10:09 [ТС] | ||||
|
Просто автор "Чистой архитектуры" дал своеобразные названия классам этой "системы": Controller, Presenter, InputPort, OutputPort, UseCaseInteractor. Добавлено через 2 минуты А как назвать по другому? Было предложение назвать "деловая логика" или "предметная логика" - это и по сути ближе и звучит более "по русски". Добавлено через 2 минуты Обычно для сохранения используется репозиторий. Вы имеете ввиду репозиторий? Добавлено через 43 минуты Кстати... В моей задаче есть требование отображать ход выполнения в виде таблицы. Если бизнес-слой будет отдавать клиенту только данные о каждой выполненной операции, то откуда на клиенте возьмется таблица? Значит, таблицу какой-то модуль должен создавать. Как мне кажется, интерфейс не должен заниматься созданием таблицы. Может быть действительно надо использовать репозиторий? Например, всю информацию о ходе выполняемых действий записывать в слое бизнес-логики в репозиторий, и отдавать клиенту список из этого репозитория?
0
|
||||
| 16.09.2024, 12:29 | |||
|
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||||
| 16.09.2024, 16:24 | ||||
|
Репозиторий (или аналоги) - это "бездумное" сохранение. По сути - это отображение сущности на таблицу.
0
|
||||
|
0 / 0 / 0
Регистрация: 22.09.2023
Сообщений: 54
|
||||||
| 17.09.2024, 09:07 [ТС] | ||||||
|
Только не совсем понял про сохранение на уровне приложения. Что значит "маппинг сообщений об ошибках"? Что такое "прочее"? Можно пример? Добавлено через 8 минут По условиям задачи бизнес-логика должна все свои действия "регистрировать". Это не "ненужная" информация. А раз так, значит ее надо где-то сохранять. Бизнес-логика не будет знать как эта информация выводится в интерфейсе, она просто фиксирует информацию о выполняемых действиях. Еще одним "аргументом" "за" сохранение этой информации может быть следующий момент. Допустим клиент в какой-то момент "отвалился", через некоторое время снова подключился. По идее в этом случае клиент должен отобразить те действия, уведомления о которых он пропустил. А значит, клиент должен их прочитать из какого-то хранилища. Получается, все-таки информация о выполняемых действиях - это часть бизнес-логики. Верно я рассуждаю? Добавлено через 1 минуту Добавлено через 2 минуты
0
|
||||||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||||
| 17.09.2024, 17:30 | ||||
|
Метод в репозитории (уровень данных) просто сохраняет документ1 в таблицу Документ1. Метод в домене (уровень бизнес-логики) при сохранении валидирует документ1 (например, проверяет наличие нужного значения в справочнике) и, при необходимости, вносит изменения в связанные сущности. Метод в приложении может, например, может автоматически добавлять в справочник нужное значение. Или создавать сразу несколько документов, подставлять значения по-умолчанию для некоторых полей и т.п.
0
|
||||
| 17.09.2024, 17:53 | ||
Такой разговор/обсуждение беспредметны
0
|
||
| 17.09.2024, 17:53 | |
|
Помогаю со студенческими работами здесь
15
Отображение процесса выполнения В графическом пользовательском интерфейсе ввести данные в виде таблицы В отдельном потоке вычислить уравнение; результат отобразить в пользовательском интерфейсе В отдельном потоке вычислять значение w и непрерывно обновлять его в пользовательском интерфейсе Отображение прогресса выполнения операции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|