|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.06.2015, 11:20 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Проектирование логики работы ПО
Доброго времени!
Переписываю одну софтину, возникла ситуация: Есть программная часть, скажем интерфейс IManager - создается всегда и существует от начала времен и до коллапса вселенной. Есть пользовательская часть, визуальная, скажем IManagerUI - он есть, когда есть окно ManagerWindow. Следовательно MnagerWindow реализует IManagerUI, которому передается существующий экземпляр IManager. IManagerUI начинает управлять IManager. Добавили данные через UI - соотв. интерфейс IManagerUI прозрачно добавит данные в IManager и рисует их. но вот беда снова IManagerUI не в курсе новых данных в IManager (добавили элемент, изменили сущ. элемент, удалили), поступивших НЕ от ManagerWindow. Нужен какой-то сервер уведомлений... куда копать? Или может надо как-то иначе посмотреть? |
29.06.2015, 13:23 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Добавить INotify с методами нужных уведомлений.
В IManager добавить Subscribe/Unsubscribe методы, с аргументом INotify который следует уведомлять о событиях. Класс, который имплементирует IManagerUI имплементирует так же и INotify, подписывается на события, и т.д. |
29.06.2015, 15:28 | #3 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
29.06.2015, 16:15 | #4 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Задача простая - переписать все на интерфейсы, отделить котлеты от мух, т.е. к коде Manager ни в коем случае не лезть в UI. Было: Код:
Код:
Последний раз редактировалось Человек_Борща; 29.06.2015 в 16:18. |
|
29.06.2015, 16:25 | #5 | |||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Это первое. И второе. Я знаю что это не правильно, но первый код намного читабельней второго. Уже поэтому второй нуждается в переработке. Нельзя переписать: Код:
Код:
Просто сделайте обертку, скрывающие детали реализации. А уже конкретный Target передадите по обстоятельствам. Этот код будет работать например в Лазарусе и под линукс например. А если выделите все эти обертки типа AddListBox в отдельный юнит/модуль, то сможете оперативно менять его под разные платформы (например, под планшеты). Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 29.06.2015 в 19:37. |
|||
30.06.2015, 16:27 | #6 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Код бажный не оптимизированный, потому что из демо-примера который пишу, чтобы понять как это работает. Цитата:
Последний раз редактировалось Человек_Борща; 30.06.2015 в 17:04. |
||
30.06.2015, 18:15 | #7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Переписывайте на шарпе с использованием WPF, там уже есть биндинг, который это умеет
На делфях если всё еще VCL там, то подглядеть как они запилили это в TDBEdit и прочих контролах из той же вкладки. В целом, зависит от задачи, но втихаря что-то там перерисовывать на экране - это не кошерно. Пользователь тыкал в одну строку таблицы, а там уже что-то обновилось и непонятно что выбралось, а нужная строка куда-то ускакала. |
30.06.2015, 20:53 | #8 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
30.06.2015, 22:32 | #9 | |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Цитата:
Либо, если в данной архитектуре IManager -- интерфейс манипуляций данными, механизм подписки должен быть реализован как-то отдельно. В DB-компонентах Delphi сделано именно так, за подписку отвечает TDataSource, если не ошибаюсь. |
|
30.06.2015, 23:40 | #10 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Цитата:
Я имею ввиду ситуацию, когда есть GUI IManagerUI над IManager, одновременно с этим для IManager по HTTP приходит новый элемент для вставки в список и вот тут нужно как-то сообщить в IManagerUI о том что, что-то добавилось и надо бы это отрисовать если есть куда(эл-т будет в поле зрения). Когда юзер работает в UI, само ничего из ниоткуда не придет и не изменится, просто потому что в двух местах сразу быть нельзя) |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
алгебра логики | LiR1Ka | Помощь студентам | 3 | 07.06.2011 22:37 |
Алгебра логики. | Александр95 | Помощь студентам | 3 | 12.04.2011 16:02 |
алгебра логики | вредина123 | Помощь студентам | 0 | 12.12.2010 19:08 |
Развитие логики | Lemo | Помощь студентам | 5 | 04.11.2009 14:23 |
Проектирование и разработка информационной системы на примере работы отдела кадров - delphi | lesha oskol | Помощь студентам | 3 | 24.01.2009 18:14 |