|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
В этой статье у автора есть модели представления для узлов дерева, но такое ощущение, что на каждый раз приходится делать новую модель представления. Потому что презентационные свойства (свойства, относящиеся к виду узла, развёрнут ли он и т. п.) у него перемешаны со свойтсвами данных (т. е. относящимися к модели). Я выделил только презентационную часть и у меня получилась универсальная модель узла: Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.
Проблема в том, что я не могу сделать эту модель реюзабельной. Т. е. желательно, чтобы эта базовая модель была базовым классом для модели представления, которую я хочу отобразить в виде дерева. Как сделать эту мою базовую модель реюзабельной с требованиями: - вместо Model должен быть любой тип модели; - этот тип модели должен иметь свойство Children, возвращающее IEnumerable<Model>? И более общий вопрос - кто как делал у себя модели представлений для отображения в TreeView? У вас есть какая-то универсальная модель, или каждый раз заново делаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:38 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
В свойствао IsExpanded и IsSelected не обращайте внимания на строчки вида Код: c# 1.
На самом деле там обычный сеттер вида _isExpanded = value. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:41 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320, Например, так: 1) Ввести для модели такой интерфейс: Код: c# 1. 2. 3. 4.
2) Вот так модифицировать класс Noded_VM: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:46 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Noded_VM<T> _parent * ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:48 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320, если конкретный тип поля _current не важен, то можно обойтись и без генерика, просто подставив в ваш код вместо Model ITreeModel ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:51 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Еще 1 фикс: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 20:55 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Я тоже раньше к такой реализации приходил. Но запутался в деталях. В частности, и у меня тогда, и по вашей реализации сейчас (включая все ваши последние фиксы) я получал ошибку на строке Код: c# 1.
Ошибка такая Argument 1: cannot convert from 'ITreeNodeModel' to 'T' ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:09 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Argument 1: cannot convert from 'ITreeNodeModel' to 'T' Это тот же ваш интерфейс ITreeModel, просто я его по-другому назвал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:10 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Argument 1: cannot convert from 'ITreeNodeModel' to 'T' Это тот же ваш интерфейс ITreeModel, просто я его по-другому назвал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:10 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Ну и далее те же проблемы, что были и у меня. Беру объект, который выполняет интерфейс ITreeNodeModel: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Ошибка такая 'Quest' does not implement interface member 'ITreeNodeModel.Children'. 'Quest.Children' cannot implement 'ITreeNodeModel.Children' because it does not have the matching return type of 'System.Collections.Generic.IEnumerable<ITreeNodeModel>'. Я не понимаю, почему я не реализовал интерфейс - ведь List реализует IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:24 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Вот класс, расширяющий класс Noded_VM Код: c# 1. 2. 3. 4. 5. 6.
Ошибка на строчке base(current) авторArgument 1: cannot convert from 'Quest' to 'ITreeNodeModel' ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:28 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Ошибка на строчке base(current) авторArgument 1: cannot convert from 'Quest' to 'ITreeNodeModel' Тоже не понятно, почему нильзя привести, ведь Quest наследуется от ITreeNodeModel. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2014, 21:29 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
ведь List реализует IEnumerable. - и что? Он требует именно IEnumerable ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2014, 20:28 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Lelouchведь List реализует IEnumerable. - и что? Он требует именно IEnumerable Он не только требует IEnumerable, но и ITreeNodeModel вместо типа, его реализуюего. Т. е. не только нельзя, чтобы Children возвращал это List<Quest> но и это List<ITreeNodeModel> и это IEnumerable<Quest> А как же приведение типов? Такое ощущение, что приведение типов работает в runtime, но не в designtime. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 07:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Lelouchведь List реализует IEnumerable. - и что? Он требует именно IEnumerable Он не только требует IEnumerable, но и ITreeNodeModel вместо типа, его реализуюего. Т. е. не только нельзя, чтобы Children возвращал это List<Quest> но и это List<ITreeNodeModel> и это IEnumerable<Quest> А как же приведение типов? Такое ощущение, что приведение типов работает в runtime, но не в designtime. Потому что внутри свойства Children я могу вернуть List<Quest>: return List<Quest> и всё будет нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 07:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
А ещё заметил такое ограничение, что если я наследую public class NodedQuest_VM : Noded_VM в таком дизайне Noded_VM, как у меня , нельзя будет в XAML привязать ни одного свойства из NodedQuest_VM, если шаблон данных работает со свойством Children типа Noded_VM. Можно как-то обойти это, чтобы Children родительского класса возвращал коллекцию объектов типа потомкового класса? Пока думаю снова с параметром типов, но боюсь, что слишком при этом всё усложнится. Щас попробую... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 07:34 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Пока сделал вот так, но пишет ошибку в строчке, что я обозначил Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Если добавить new(): Код: c# 1.
то получаю в этой же строчке следующую ошибку 'T': cannot provide arguments when creating an instance of a variable type ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 08:01 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Что-то как-то заморочено с этим тривью. Неужели никто не сделал универсальный контейнер для treeview node? Чтобы можно было любой тип в этот контейнер помещать и получать функциональность узла в дереве. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 08:03 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Если кому интересно, я тут создал такой же вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 08:41 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Пока только вот что придумал: надо в эту универсальную модель представления для узла добавлять всякие свойства для кастомизации. Например, DisplayName для отображения названия узла в дереве. Если чего посложнее надо - тоже добавить эти сложные свойства в эту универсальную модель. Получается, что эта универсальная модель раздуется из-за этих расширений до невозможности. А я хочу получать функциональность не таким раздуванием, а наследованием или ещё каким простым способом. Так, чтобы каждый кирпичик этих функциональностей содержал в себе только свою функциональность, а не кучу кода поддержки расширений. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 09:08 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
авторНапример, DisplayName для отображения названия узла в дереве. Если чего посложнее надо - тоже добавить эти сложные свойства в эту универсальную модель. Я имед ввиду, а что, если я хочу не просто название в узле отображать, а некую сложную конструкцию? Придётся городить дополнительное свойство для отображения этой сложной конструкции... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 09:10 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
А, щас ещё раз взглянул на пример Джоша Смита . Во втором варианте, где у него города, штаты и прочее в дереве, у него как раз и есть базовая модель представления. Моя ошибка в том, что я сделал загрузку детей в этой же базовой модели, а он сделал метод загрузки виртуальным и предоставил потомковым моделям самим определять, как будут загружаться дети. Это позволяет отказаться от интерфейса со свойством, реализующим загрузку детей. Но, с другой стороны, это заставляет потомковые модели представления быть толще, чем они могли бы быть. Вобщем, у Джоша Смита подход лучше. Его и буду использовать. Мой вариант настолько универсальный, что его реализация будет либо невозможной, либо чрезмерно громоздкой - всё из-за загрузки детей. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 09:19 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Есть универсальный родной TreeViewItem, как часть родной content model WPF. Накой лепить ещё одну универсальную абстракцию? Бинди его на конкретную ViewModel и радуйся жизни. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 09:57 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Вобщем, у Джоша Смита подход лучше. Его и буду использовать. Мой вариант настолько универсальный, что его реализация будет либо невозможной, либо чрезмерно громоздкой - всё из-за загрузки детей.У Джоша Смита подход так себе. Для загрузки детей дерева нужен аналог Lazy<T> с реализацией INotifyPropertyChanged. Вот моя асинхронная реализация. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:07 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Вобщем, у Джоша Смита подход лучше. Его и буду использовать. Мой вариант настолько универсальный, что его реализация будет либо невозможной, либо чрезмерно громоздкой - всё из-за загрузки детей.У Джоша Смита подход так себе. Для загрузки детей дерева нужен аналог Lazy<T> с реализацией INotifyPropertyChanged. Вот моя асинхронная реализация. У Джоша ленивая загрузка. Я только с твоим async не понял, как она реализуется. Через другой поток? А если асинк не нужен, то всё нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:18 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... У Джоша Смита подход так себе. Для загрузки детей дерева нужен аналог Lazy<T> с реализацией INotifyPropertyChanged. Вот моя асинхронная реализация. У Джоша ленивая загрузка.Тут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева. user7320Я только с твоим async не понял, как она реализуется. Через другой поток?Какой Task создашь - через такой поток и будет. См "Асинхронные ленивые свойства" . user7320А если асинк не нужен, то всё нормально?Тут асинк не имеет значения. Можно сделать без него. Но с ним лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КЕсть универсальный родной TreeViewItem, как часть родной content model WPF. Накой лепить ещё одну универсальную абстракцию? Бинди его на конкретную ViewModel и радуйся жизни. А я и так байню свои модели представления на TreeViewItem: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:30 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей, а так не комильфо? http://codearticles.ru/articles/2087 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:33 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КТут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева. Даже если твой подход крут, это для меня почти ничего не значит. Проблема в том, что я ещё не настолько это всё понимаю, чтобы решать, что там круче, а что нет, и что мне и зачем надо. Я должен сам до этого дойти. Иначе будет тупое копирование чужих наработок без понимаю, как они работают и зачем они нужны. Вот у Джоша даже если и простой пример, но я понимания, как там работает каждая строчка и зачем она нужна. А у тебя я почитал - куча бесполезных для меня букв. Вот, например: авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса: и дальше описание этих способов. Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то? Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота. А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно. Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:37 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087 Почему без async? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:42 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КПочему без async? Асинкодрочеры, блин :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:44 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей Кuser7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem. Так Джош в своей же статье и написал, зачем прослойка нужна и почему - см. "What Exactly Makes the TreeView so Difficult?". мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087 автор Код: c# 1.
А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:49 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КПочему без async? Асинкодрочеры, блин :) Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:51 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. Для лейзи юзай команду в OnExpanded. У меня не лейзи. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:55 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А у тебя я почитал - куча бесполезных для меня букв.Я предлагал прочитать пару абзацев про UiAsyncLazyProperty<T> и сравнить его с родным Lazy<T>. user7320Вот, например: авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса: и дальше описание этих способов. Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то?К сожалению, сам. Набив при этом не мало шишек и выбросив кучу кода в золотую корзину. user7320Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота.Мне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным. user7320А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно. Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить.С этим не спорю, материал рассчитан на подготовленного читателя. Я специально не стал писать на общеизвестные темы, этой информации и без меня хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:04 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320мсущкопропущено... Асинкодрочеры, блин :) Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:07 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КПочему без async? Асинкодрочеры, блин :)В убогом JS всё асинхронно. А мы чем хуже? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:15 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоuser7320А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. Для лейзи юзай команду в OnExpanded. У меня не лейзи. У тебя сразу всё грузится, как я понял. Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция. авторМне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным. Тогда согласен. Алексей Кuser7320пропущено... Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно. Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи везде, даже если надо из ОЗУ достать и показать десяток айтимов? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:19 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи вездеЛюбое обращение к серверу потенциально тормозящее. user7320даже если надо из ОЗУ достать и показать десяток айтимов?Ну и что? Там применяется Task. Его можно запустить четырьмя способами: 1. Thread Pool. 2. New Thread. 3. UI Thread. 4. I/O Completion port. Так же можно произвести расчёт синхронно и вернуть завершённый Task с помощью метода Task.FromResult. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:33 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КВ убогом JS всё асинхронно. А мы чем хуже? Ну если ты о аяксе, то да. Просто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже. Просто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо. user7320Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция. Правильно, каждому дереву своя модель представления. Не вижу ничего ужасного. Обобщение - это болезнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:00 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КВ убогом JS всё асинхронно. А мы чем хуже? Ну если ты о аяксе, то да.Да, о Аяксе. мсущкоПросто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже.И там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция. мсущкоПросто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо.Кто бы говорил, любитель вьюмоделей. :-) мсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:19 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КИ там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция. Согласен. Но длительное ожидание - это нештатная ситуация, то есть проблема. А проблемы нужно решать другими способами. Ну ты понимаешь, о чём я. Так вот зачем мне городить петрушку асинков, если проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком. Ведь даже в твоём случае UI не заблокируется - это да, но юзер не получит данные (или получит через 100500 лет). В обоих случаях работа юзера останавливается. Просто в случае с браузером нужно понимать, у нас есть и другие вкладки. А в случае личной песочницы вообще пох. Алексей Кмсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру. 100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:39 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоТак вот зачем мне городить петрушку асинковДа какая там петрушка, там работы на 5 минут. мсущкоесли проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком.Одно другому не мешает. Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:53 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей Кпропущено... Добавил... Во всём надо знать меру. 100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно.Да ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:55 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. А зачем столько много обращений? Многовато... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:04 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. А зачем столько много обращений? Многовато...Можно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:08 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:16 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы.Пробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:36 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КПробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом. А на мой взгляд вполне удобно. Особенно для пухлых форм. Кстати, посмотри на odata , трачить контекст можно прям с клиента. Пока не так гибко, как EF, но уже съедобно. Ну и REST в одном флаконе. P.S. Вот за что я люблю веб - на сервере приложений не нужны никакие прокладки, напрямую заходим сразу в базу и собираем модель. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 14:32 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КПробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом. А на мой взгляд вполне удобно. Особенно для пухлых форм. Кстати, посмотри на odata , трачить контекст можно прям с клиента. Пока не так гибко, как EF, но уже съедобно. Ну и REST в одном флаконе. P.S. Вот за что я люблю веб - на сервере приложений не нужны никакие прокладки, напрямую заходим сразу в базу и собираем модель. Даже EF-прокладку не используешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 15:52 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Даже EF-прокладку не используешь? Причем тут EF? Речь о tier, а не layer. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 16:30 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоКстати, посмотри на odata Да, я планирую более детально ознакомиться с OData. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 17:45 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КВесь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. А вы обучаете этим мануалом новичков-джуниоров, или вообще всех. Какому-нибудь сеньору с опытом это надо? Или вам надо, чтобы сеньор забыл о том, что знает и умеет, и делал всё по вашим наработкам? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 07:08 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1441130]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
135ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 565ms |
0 / 0 |