Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Начитался Composite Client Application Guidance . Решил применить прочитанное в разрезе MVVM. Что-то вроде почти тоже самое получается и без всяких CAL :) Тестовый проект в аттаче, если кому интересна зарисовка с парой страниц и парой кнопок. Для компиляции нужен установленный Unity Application Block 1.2 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 22:20 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Да, запостил к тому, что поругайте, кому не лень :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 22:21 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Неплохо,читал не зря,но замечания есть.Завтра напишу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2009, 23:41 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaНеплохо,читал не зря,но замечания есть.Завтра напишу Там проект, что называется "в процессе". Рефакторингом занялся. Вынес управление приложением в отдельный класс, добавил очистку сессии и т.п. Улучшенный вариант в аттаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 00:47 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Еще вариант. Добавлено некое подобие именованных регионов (в оболочке их объявлено два - MainRegion и HeaderRegion). Правда, пока сам не до конца понимаю, как ими управлять. По идее, надо или для каждого компонента (в самом компоненте) выбирать регион, в котором рисоваться, или, для каждого компонента мутить свой вложенный контейнер, в котором выделять предназначенный для его размещения регион. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 02:29 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
С регионами частично разобрался. Вот таким вот способом можно указать регион в предыдущем варианте проекта. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 02:43 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Если кому еще интересно, то продолжение будет на codeplex . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 03:33 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Изменения сделал правильные,но: - ViewModel не должна зависеть от View, посему не должны быть Regions в нем.Для активации,показа View должна быть отдельная сущность, в твоем случае - Controller. - ViewModel - это всего лишь мостик между данными и View, в идеальном варианте должен быть максимально простым не содержать логики, жесткая связанность с контроллером не нужна.Последний подписывается на сообщение или содержит обработчик команды,а ViewModel публикует сообщение или вызывает команду - Вместо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. - дай ссылку на Unity в codeplex c более новым и улучшенным вариантом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 16:35 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Все остальное позже почитаю. SeVa- дай ссылку на Unity в codeplex c более новым и улучшенным вариантом Здесь не понял. У меня ссылка на Unity вроде правильная. 1.2 для WPF Октябрь 2008 последняя официальная версия :) Есть еще для сервелата декабрьская, но у меня не сервелат :) Видел упоминания о 2.0, но найти смог только какие-то отдельные куски кода... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 17:56 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Unity 2.0 Там есть ссылка на загрузку с codeplex. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 18:06 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
авторно у меня не сервелат Один из показателей "правильности"- весь код для WPF и SL версий должен быть одинаков кроме xaml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 18:11 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVa, да, и про диалоговые окна меня даже как-то зацепило Не сообразил сразу, что все мои представления - практически диалоговые да еще и модальные, к тому же. На счет событий - сегодня думал как-раз на тему, как заменить их на некие именованные маршрутизаторы сообщений, встроенные в Unity контейнер. На мой взгляд, при таком раскладе, сообщениями проще обмениваться, чем события накручивать - иначе обработчиков до нескольких десятков к каждой модели придется лепить и к каждому контроллеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 18:16 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaобычно создают отдельный сервис для диалоговых окон,тогда Код: plaintext 1. 2. 3. 4. 5. А вот вопрос тогда - у меня почти все так как ты описал. Но часть представление размазана по нескольким регионам. Например, эксплорер - в нем отображаю фотографии с дисков клиента, а элементы управления в стороне от основного места событий висеть должны. Как быть в такой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 18:53 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Опиши подробней.Какие элементы управления и что должно происходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 19:17 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaОпиши подробней.Какие элементы управления и что должно происходить? Область по центру окна. В нем wrap-панель с фотографиями / папочками / дисками. И в разных местах окна - управление навигацией и т.п. в перемежку с кусками дизайна, относящимися к другим модулям. В прошлой версии у меня был источник данных с отдельным представлением с кнопочками, строкой для ввода пути и т.п. А в текущем варианте что-то не соображу - это должны быть так же разные представления (эксплорера и источника данных)? Хотелось бы все в один модуль как-то увязать, но что бы можно было указать пункт назначения, где что отображать :) PS: Может сумбурно объяснил... я имею в виду, вариант с диалоговым окном - у меня получается несколько представлений и моделей представлений в одном модуле и в вариант с "OpenPopupWindow()" оно совсем, на мой взгляд, как-то не ложится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 19:46 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Сделай вариант и для SL,посмотри "Multi-Targeting QuickStart ".C FlowControl,DeepZoom можно будет сделать конфету и 400Мб народу устанавливать не нужно будет. Скоро тоже собираемся прикручивать изображения,поделись,как с ними боролись.Кажется, вы использовали FileStream, какие впечатления о нем,насколько устойчиво работает,есть ли грабли?По тестам для изображений больше чем 2Мб он на порядок быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 20:32 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
авторВ прошлой версии у меня был источник данных с отдельным представлением с кнопочками, строкой для ввода пути и т.п. А в текущем варианте что-то не соображу - это должны быть так же разные представления (эксплорера и источника данных)? Да,два разных представления и ViewModel.Не понятно,что из себя представляет источник данных,если список файлов,то: - на кнопку "Открыть" навешиваем команду, в ее обработчике в отдельном ViewModel,вызываем сервис для работы с файлам,получаем список и публикуем сообщение с ним.В других ViewModel, в обработчиках этого сообщения, делаем нужные телодвижения. автор Хотелось бы все в один модуль как-то увязать, но что бы можно было указать пункт назначения, где что отображать :) В Prism это делается просто.В главном окне создаешь заготовку с нужными регионами,например:статусбар,explorer,toolbar,окно для просмотра выбранного фото и тд.Для каждого из них отдельные ViewModel&View. Опиши по шагам,что может делать пользователь,подумаем,как это удобней скомпоновать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 21:10 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaСделай вариант и для SL,посмотри "Multi-Targeting QuickStart ".C FlowControl,DeepZoom можно будет сделать конфету и 400Мб народу устанавливать не нужно будет. DeepZoom использовать не получится - его надо заранее расчитывать, насколько я помню. Под SL хотел сделать, но как-то руки все не дошли. Тут доступ к дискам клиента нужен - под SL придется что-то типа сервиса доступа к файловой системе мутить... или веб-сервер а-ля WCF REST, и уже из этого сервера показывать файлы в виде картинок в SL. SeVaСкоро тоже собираемся прикручивать изображения,поделись,как с ними боролись. Для чтения картинок с медленных устройств (а они почти все значительно медленнее жесткого диска) - писал обработчик очередей (точнее, стека) сообщений - для каждого носителя свой стек. Для отображения картинок рисовал свою VirtualizedWrapPanel - клиенты любят притащить весь свой архив фотографии сложенный в корень DVD-диска, а память она ж не резиновая. Особенно под x86 с его лимитом в 2Гб. Скоро блюреи начнут такие с собой таскать... готовлюсь - рисую новую версию, которая будет быстрее, выше, сильнее И, кстати, насчет SL - думаю, в данной ситуации, он был бы немного в выйгрыше... Еще про картинки - в windows 7 майкрософты поправили глюк с zip-ованными тифами, в XP и Vista править, насколько я понял, ни кто не собирается. Плюс, утечки памяти при работе с майкрософтовской графической библиотекой победить получилось только через выделение отдельного домена для сессии и последующего его убивания. Поэтому, имхо, правильный выбор - ImageMagick и ему подобные наборы. SeVaКажется, вы использовали FileStream, какие впечатления о нем,насколько устойчиво работает,есть ли грабли?По тестам для изображений больше чем 2Мб он на порядок быстрее. По FileStream - работает со скоростью дисковой подсистемы, стабильно, быстро. Только вот версионность данных мне не совсем нравится - после удаления файла (база в SimpleMode) место на диске может до нескольких часов занятым оставаться, пока сервер не соизволит его почистить от мусора. И если записывать данные поверх старых, то все копии лежат так же долго. Ну и, собственно, гоняли его пока только в плотном тестовом режиме - только в новой версии программы все файлы будут на него напрямую сливаться. По скорости и надежности от просто файловой системы ни чем не отличается, если не считать транзакционную целостность синхронную с данными. Ибо, читаешь все равно с файловой системы напрямую - от сервера только путь получаешь. В общем, filestream я бы порекомендовал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 21:14 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
авторТут доступ к дискам клиента нужен - под SL придется что-то типа сервиса доступа к файловой системе мутить... или веб-сервер а-ля WCF REST, и уже из этого сервера показывать файлы в виде картинок в SL В SL есть FileOpenDialog,ничего мутить не нужно. авторDeepZoom использовать не получится - его надо заранее расчитывать, насколько я помню. Правильно,нужно,но несложно. Эта программа для пользователей сервиса?Или для работников конторы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 21:36 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaОпиши по шагам,что может делать пользователь,подумаем,как это удобней скомпоновать У меня тут дизайн готовый лежит :) Вот думаю, как сделать лучше. Тут набор страниц что-то типа карусельного мастера. Несколько модулей: - приветствие + регистрация пользователя, - редактор заказа а-ля макдональдс, с горой кнопок типа водопада - при выборе одной кнопки ниже появляется новая строка с кучей новых кнопок, - эксплорер для выбора файлов (доступен из редактора заказов и с отдельной большой кнопки в левом верхнем углу экрана + в том же углу пара кнопок для перемещения по истории эксплорера "вперед" - "назад"), - простенький фоторедактор (повернуть, обрезать, глаза красные убрать и т.п.), - страница для просмотра заказа и цены, - справка на все случаи жизни, при этом нужно обеспечить: - возможность быстро наращивать функционал редактора заказов и вообще расширять архитектуру методом добавления новых модулей, - возможность, наоборот, откусить некоторые куски в кратчайшие сроки, что бы скомпоновать урезанный вариант... - плюс, все это под тачскрин, который уже второй месяц везут и ни как привезти не могут Сначала TabControl прикрутил и тупо табы в нем переключал при переходе со страницы на страницу. Нравилось до тех пор, пока дизайнеры кнопки не начали по всему экрану растаскивать Стал думать про регионы и управление ими. Вышел на CAB, затем на Prism. Покрутил - идея понравилась, реализация - не очень Хотя, может, я что-то не до конца в них понял? Вариант написать новую программу и под WPF и под SL два в одном очень даже... хотя можно просто в SL - ни кто и не заметит, что сервер локально на машине стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 22:00 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaавторТут доступ к дискам клиента нужен - под SL придется что-то типа сервиса доступа к файловой системе мутить... или веб-сервер а-ля WCF REST, и уже из этого сервера показывать файлы в виде картинок в SL В SL есть FileOpenDialog,ничего мутить не нужно. а) FileOpenDialog кастомизации не поддается (по крайней мере, я не нашел, как это можно сделать) б) FileOpenDialog показывает все диски, а нужны только диски пользователя (даже не интересовался - может у него и есть какие-то надежные фильтры, которые пользователю не обойти) в) FileOpenDialog не показывает информацию из exif г) FileOpenDialog is PopUp, что, дизайнеры считают, моветон и будет мешать клиентам наслаждаться моментом заполнения заказа д) каждый отображаемый клиенту файл должен выглядеть так, как он будет напечатан (Crop + правильное цветовое пространство + рамки + размеры и т.п.) - думаю, в FileOpenDialog проблемно будет затолкать. е) Память. Сколько ее отъест FileOpenDialog - для меня загадка. Надо как-нибудь будет попробовать скормить ему DVD с фотографиями. Для всего этого в предыдущей версии я использовал самописный асинхронный DataSourceProvider, самописный VirtualizingWrapPanel с виртуализацией UI и данных, и самописный стек (очередь) заданий для медленных дисков. Все это есть, но работает немного кривовато. Например, с клавиатуры невозможно управлять прокруткой для VirtualizingWrapPanel, очереди иногда застревают на несколько минут на битых файлах :) SeVaавторDeepZoom использовать не получится - его надо заранее расчитывать, насколько я помню. Правильно,нужно,но несложно. А я про сложность и не говорил :) Речь о времени расчета. SeVaЭта программа для пользователей сервиса?Или для работников конторы? И для тех и для других. Наборы модулей будут немного различаться и компоновка объектов на экране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 22:35 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Добавлю еще маленькую деталь. Это киоск. То есть, программа стоит вместо шелла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 22:39 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Такой сценарий четко бьется на отдельные usecase и команды.Посмотри outlook style application with prism v2 .Мне весьма понравилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 22:50 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
Если не устраивает FileOpenDialog,можно использовать javasript или другой динамический язык. авторА я про сложность и не говорил :) Речь о времени расчета. Для 6Г не пробовал,для нескольких фотографий тормозов не заметил.На codeproject есть готовый пример. Что вы используете для чтения exif? ФОто грузите на сервер? Если да,то каким способом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2009, 23:25 |
|
||
|
WPF: MVVM + UnityContainer - CAL
|
|||
|---|---|---|---|
|
#18+
SeVaЕсли не устраивает FileOpenDialog,можно использовать javasript или другой динамический язык. Для чего использовать? Лучше тогда бэкэнд написать... SeVaавторА я про сложность и не говорил :) Речь о времени расчета. Для 6Г не пробовал,для нескольких фотографий тормозов не заметил.На codeproject есть готовый пример. Что вы используете для чтения exif? ФОто грузите на сервер? Если да,то каким способом? В новой версии exif будет разбирать ImageMagick В старой - BitmapMetadata, но он иногда врет. Сейчас фото грузятся сначала в %temp% на локальной машине, затем переливаются на сервер. Даже страничка такая есть "подождите, пока файлы скопируются на сервер". Хочу сделать сразу в локальную базу, а затем, по запросу сервера,- на сервер. Насчет тормозов для нескольких фотографий - если с диска локальной машины, то скорость вполне устраивает. Тем более, что больше одного файла одновременно не гружу. А вот если с DVD, то процесс может затянуться вплоть до нескольких часов. Особенно, если много мелких файлов и диск поцарапанный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2009, 02:53 |
|
||
|
|

start [/forum/topic.php?fid=21&msg=36228500&tid=1442991]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 183ms |

| 0 / 0 |
