У меня есть собственный класс данных дерева, соответствующий стандартному шаблону Composite .Я, очевидно, не хочу, чтобы графический интерфейс и модель были слишком тесно связаны, поэтому графический интерфейс должен быть Observer модели, и изменения следует вносить через уровень модели.Я реализую наблюдаемую поддержку с использованием событий C # - пока все хорошо, и у меня есть работающая система.
- Какие события вы ожидаете генерировать наблюдаемое дерево?NodeCreate, NodeDelete, NodeMove?
- Вы бы создали одно
TreeChange
событие и закодировали бы информацию об изменениях в TreeChangeEventArgs
, или вы бы создали одно событие для каждого типа обновления (возможно, вместе с конкретными классами EventArg для каждого)? NodeDeleting
или NodeDeleted
?Без получения удаленного узла в качестве аргумента NodeDeleted
кажется мне очень ограниченным?Конечно, дерево может запустить событие NodeDeleted
до (возможно) удаления узла, но является ли хорошей практикой бросать (хотя бы концептуально) удаленный узел вокруг? - При удаленииУзел, содержащий подузлы, ожидаете ли вы получить одно событие
NodeDeleted
или рекурсивное NodeDeleted
для подузлов?Один NoteDeleted
кажется мне подходящим, но, возможно, есть некоторые случаи, которые я не рассматривал. - Изменения отдельных узлов, в отличие от изменений в древовидной структуре.Я предполагаю, что это лучше всего обрабатывать, наблюдая отдельные узлы?(В настоящее время я обрабатываю это с INotifyPropertyChanged для классов узлов).
- Нет, я не хочу использовать
Windows.Forms.TreeView
в качестве основной структуры данных:)
И бонусный вопрос: позволить клиентам напрямую манипулировать узлами дерева и запускать события самим деревом, или делать что-то вроде Service.Instance.AddNode(parentNode, "New node name")
и иметь класс Service, отвечающий за генерацию событий?