|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320Алексей КИз-за этого тебе приходится описывать объёмную структуру данных в нескольких местах и заниматься бесполезным делегированием. А всё ради размещения логики в сеттерах свойств. Оно того не стоит. Ищи альтернативный способ размещения логики. Ну почему только в свойствах. Сейчас у меня это в командах.Тогда мы ходим по кругу . user7320Я заметил, что не использую Children_CollectionChanged в своей ObservableCollection Children. Попробую логику изменения модели поместить туда. Т. е. в команде будет меняться вью модель дерева - потомок добавляться в Children, а в событии CollectionChanged будет обновляться модель...Ну удачи... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 14:36 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Как считаете, нормально? Код: c# 1. 2. 3. 4. 5. 6.
Определяет, стоит ли пустить пользователя дальше с неверными куками, или пока повременить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:40 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
private убери. Там по дефолту private. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 16:57 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Алексей К, если что, я продолжаю делать это . Вот, добавил возможность прощения нескольких несовпадающих куки в единицу времени - сценарий смены браузера пользователем (пришёл домой с работы и т. п.). Но не пропустит тех, кто с двух браузеров под одним аккаунтом одновременно работает - будет постоянно отправлять на перелогинивание. Кстати, там говорили, что де куки могут "испортиться", потеряться и пр. форс-мажор, поэтому де на куках такое основывать это не по-взрослому. Ну чего-то я не видел, чтобы на форумах или ещё где куки терялись - например, тут я без вылогинивания месяцами сижу. Короче, куки достаточно надёжная вещь. В крайнем случае юзер раз в месяц лишний раз перелогинится. У меня вообще сессия убивается через двое суток (по дефолту в MembershipProvider). Вобщем, я попробовал поработать с двух брузеров - мои сценарии отрабатываются как я и задумал. Чего может быть не так? Какие подводные камни? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:07 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Алексей Кprivate убери. Там по дефолту private. Я привык ставить явно. И скобочки на однострочные if/else. Я постоянно всё забываю - все эти дефолтные соглашения (вот, недавно забыл, в чём разница между return ++i и return i++), поэтому мне удобнее, когда явно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:08 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320Алексей К, если что, я продолжаю делать это . Вот, добавил возможность прощения нескольких несовпадающих куки в единицу времени - сценарий смены браузера пользователем (пришёл домой с работы и т. п.). Но не пропустит тех, кто с двух браузеров под одним аккаунтом одновременно работает - будет постоянно отправлять на перелогинивание. Кстати, там говорили, что де куки могут "испортиться", потеряться и пр. форс-мажор, поэтому де на куках такое основывать это не по-взрослому. Ну чего-то я не видел, чтобы на форумах или ещё где куки терялись - например, тут я без вылогинивания месяцами сижу. Короче, куки достаточно надёжная вещь. В крайнем случае юзер раз в месяц лишний раз перелогинится. У меня вообще сессия убивается через двое суток (по дефолту в MembershipProvider). Вобщем, я попробовал поработать с двух брузеров - мои сценарии отрабатываются как я и задумал. Чего может быть не так? Какие подводные камни? Тока чёта мой фильтр разросся до 200 строк кода. Правда, там половина - комменты с описанием алгоритма и четверть - скобочки и сообщения для логов. Реально за одно обращение к фильтру строк 20 выполняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:13 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
И в Профайле 5 переменных для работы этого всего. Зато ни у кого такого нет! ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:13 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320Зато ни у кого такого нет! )))Верю. :-) зы: я с Asp.Net мало знаком чтобы что-то советовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:16 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Зато ни у кого такого нет! )))Верю. :-) зы: я с Asp.Net мало знаком чтобы что-то советовать. MVC же. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 17:18 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320Я так и делаю. Я имел ввиду копирование только элементов модели а не ViewModel Всё дело в Clone(). Ваши предложения по его реализации? Лично я в сериализацию - т. к. она почти наверняка понадобится и для других целей. До этого делал просто метод, копировавший все нужные поля и вызывавший рекурсивно подобные же методы из составляющих моделей. Зависит от разных вещей . Если нет вложенности, то MemberwiseClone ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 20:57 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
WebSharperuser7320Я так и делаю. Я имел ввиду копирование только элементов модели а не ViewModel Прошу прощения, я так и делаю на самом деле. Мой пример несколько отвлечённый. Вот мой реальный код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Здесь я 2 раза копирую только модель. Однако, вью модель всё равно подменяю новым экземпляром вью модели (со старой моделью, которую копирую) - см. строчку под комментарием "Refresh the UI.". Это я делаю потому, что если просто добавлять старую вью модель в дерево справа (см. скрин на предыдущей странице), то я просто создам кучу представлений в дереве и в редакторе слева, ссылающихся на одну вью модель. Т. е. если в редакторе изменю, например, имя, то оно поменяется во всех представлениях в дереве, отображающих эту вью модель. Мне же этого не надо. Поэтому вью модель в дереве (или в редаторе - где удобнее) надо подменить. WebSharper Зависит от разных вещей . Если нет вложенности, то MemberwiseClone Вложенности есть, и немало. Я эту тему тоже изучал. Пришёл к выводу, что либо делать на каждый класс свой метод копирования (который будет вызывать подобные же методы для всех сложных объектов-полей этого класса), либо сериализация. Причём сериализация от первого метода принципиально не отличается - всё равно придётся рыскать руками по классам и помечать, что сериализовать, а что нет. С сериализацией больше хлопот - кроме того, что нужно пометить, что сериализовать, надо пометить, что сериализовать НЕ НАДО. Плюс сериализуемый класс должен иметь конструктор по умолчанию и некоторые другие требования. В своём методе этого ничего не надо - просто копируешь те поля, что нужны. Зато после расстановки атрибутов сериализации получаешь готовую сериализацию в любой формат - в Дотнете есть кучка готовых сериализаторов. Есть ещё всякие извилистые подходы. Я, например, вот этот код не понял. Начал разбираться, запутался и забил. Пусть у него "в 3 раза быстрее", но с сериализацией мне зато понятнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 21:24 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
CurrentQuest - это как раз то, что отображается на скрине слева в виде редактора полей квеста. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 21:27 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320 Здесь я 2 раза копирую только модель. Зачем ее копировать два раза. Почему нельзя вторую VM создать ссылающуюся на ту же M? Как происходит изначальная инициализация VM для дерева. По идее должен быть какой-то код, который отображает М в VM почему она не может подписаться на события модели и автоматически создать VM для айтема при добавлении его в модель? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 09:56 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
WebSharperuser7320 Здесь я 2 раза копирую только модель. Зачем ее копировать два раза. Почему нельзя вторую VM создать ссылающуюся на ту же M? Как происходит изначальная инициализация VM для дерева. По идее должен быть какой-то код, который отображает М в VM почему она не может подписаться на события модели и автоматически создать VM для айтема при добавлении его в модель? Да, действительно... Что-то я не подумал. Но всё равно, остаётся ДВЕ операции над моделью. А я хочу, чтобы была одна - добавил в ObservableCollection новую вью модель, и чтобы в модели тоже всё добавилось. Т. е. один раз изменил, и все другие изменения, зависящие от этого, автоматом применились. Попробую такое сделать с подпиской на событие CollectionChanged для ObservableCollection. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 10:28 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
WebSharperПо идее должен быть какой-то код, который отображает М в VM почему она не может подписаться на события модели и автоматически создать VM для айтема при добавлении его в модель? Я думаю сделать наоборот - сначала меняется вью модель, а потом она меняет свою модель. У меня так для свойств простых сделано, которые просто "пробрасывают" свойства модели во вью. А для коллеции я что-то ступил и забыл сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 10:56 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
user7320Я думаю сделать наоборот - сначала меняется вью модель, а потом она меняет свою модель. Получается, то тот, кто меняет модель, должен знать что существует конкретный вид view для нее и если потребуется сделать какое-то другое изменение для модели (например появится метод который добавляет n айтемов сразу) ту надо будет туда добавлять код для всех вью, которые его отображают. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 11:12 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
WebSharperuser7320Я думаю сделать наоборот - сначала меняется вью модель, а потом она меняет свою модель. Получается, то тот, кто меняет модель, должен знать что существует конкретный вид view для нее и если потребуется сделать какое-то другое изменение для модели (например появится метод который добавляет n айтемов сразу) ту надо будет туда добавлять код для всех вью, которые его отображают. Да, вы правы. Тогда наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 13:11 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Алексей КВся эта prism-байда отталкивается от неверного утверждения, мол приложения на "голом" WPF плохо разделяются на модули и вообще так себе: Эта байда изначально заточена на модульность и слабую связанность. А вот твой подход, где все завязано на левых и самопальных контролах, кототые реализуют куцый интерфейс с частными случаями, полностью противоречит концепции WPF, где есть все возможности отделить интерфейс от логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 18:13 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Я вот не понял, чего МСУ так против иерархических VM и V? У меня вот такой интерфейс, как на картинке. Каждый красный прямоугольник - VM и соответствующая ему V. Самая главная вью модель - окно. Внутри контент презентеры, которые либо сразу внутри себя разметку имеют, либо через дата темплиты ссылаются на другие представления. Эти другие представления, в свою очередь, у меня выглядят как юзер контролы с разметкой. Ну и последовательный байндинг от главного окна до самого вложенного красного прямоугольника. Кнопочка с вопросиком - описание параметра. Описание хранится в модели в виде атрибута, а во вью модели вытаскивается в свойство, которое и привязывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2014, 17:04 |
|
Проблемы с иерархическими моделями представлений
|
|||
---|---|---|---|
#18+
Чёт, похоже, в этом разделе один я толкусь. Остальные все на джаваскрипт ушли? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2014, 17:07 |
|
|
start [/forum/topic.php?fid=21&gotonew=1&tid=1441125]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
138ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 303ms |
total: | 548ms |
0 / 0 |