![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Доброго времени!
Переписываю одну софтину, возникла ситуация: Есть программная часть, скажем интерфейс IManager - создается всегда и существует от начала времен и до коллапса вселенной. Есть пользовательская часть, визуальная, скажем IManagerUI - он есть, когда есть окно ManagerWindow. Следовательно MnagerWindow реализует IManagerUI, которому передается существующий экземпляр IManager. IManagerUI начинает управлять IManager. Добавили данные через UI - соотв. интерфейс IManagerUI прозрачно добавит данные в IManager и рисует их. но вот беда снова ![]() Или может надо как-то иначе посмотреть? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Добавить INotify с методами нужных уведомлений.
В IManager добавить Subscribe/Unsubscribe методы, с аргументом INotify который следует уведомлять о событиях. Класс, который имплементирует IManagerUI имплементирует так же и INotify, подписывается на события, и т.д. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Задача простая - переписать все на интерфейсы, отделить котлеты от мух, т.е. к коде Manager ни в коем случае не лезть в UI. Было: Код:
Код:
Последний раз редактировалось Человек_Борща; 29.06.2015 в 16:18. |
|
![]() |
![]() |
![]() |
#5 | |||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Цитата:
Это первое. И второе. Я знаю что это не правильно, но первый код намного читабельней второго. Уже поэтому второй нуждается в переработке. Нельзя переписать: Код:
Код:
Просто сделайте обертку, скрывающие детали реализации. А уже конкретный Target передадите по обстоятельствам. Этот код будет работать например в Лазарусе и под линукс например. А если выделите все эти обертки типа AddListBox в отдельный юнит/модуль, то сможете оперативно менять его под разные платформы (например, под планшеты). Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 29.06.2015 в 19:37. |
|||
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Код бажный не оптимизированный, потому что из демо-примера который пишу, чтобы понять как это работает. Цитата:
Последний раз редактировалось Человек_Борща; 30.06.2015 в 17:04. |
||
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Переписывайте на шарпе с использованием WPF, там уже есть биндинг, который это умеет
![]() На делфях если всё еще VCL там, то подглядеть как они запилили это в TDBEdit и прочих контролах из той же вкладки. В целом, зависит от задачи, но втихаря что-то там перерисовывать на экране - это не кошерно. Пользователь тыкал в одну строку таблицы, а там уже что-то обновилось и непонятно что выбралось, а нужная строка куда-то ускакала. |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]() Цитата:
Либо, если в данной архитектуре IManager -- интерфейс манипуляций данными, механизм подписки должен быть реализован как-то отдельно. В DB-компонентах Delphi сделано именно так, за подписку отвечает TDataSource, если не ошибаюсь.
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#10 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Цитата:
Я имею ввиду ситуацию, когда есть 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 |