У меня возникла небольшая проблема с моей иерархией классов в приложении WPF. Это одна из тех проблем, когда у вас есть два дерева наследования, сливающихся вместе, и вы не можете найти какой-либо логический способ заставить ваше наследование работать гладко без множественного наследования. Мне интересно, есть ли у кого-нибудь блестящие идеи для того, чтобы заставить эту систему работать, не делая невозможным отслеживание или отладку.
Я низкоуровневый инженер, поэтому моя первая мысль всегда была: «О! Я просто напишу некоторые из этих классов на родном C ++ и буду ссылаться на них извне! Тогда я получу все свое старомодное ОО-веселье!» Увы, это не помогает, когда вам нужно наследовать от управляемых элементов управления ...
Позвольте мне показать фрагмент моей текущей проектируемой диаграммы классов:
____________________________________ _____________________________________
| CustomizableObject | | System.Windows.Controls.UserControl |
|____________________________________| |_____________________________________|
| string XAMLHeader() | ▲
| string XAMLFooter() |◄--┐ |
| CustomizableObject LoadObject() | \ |
| <Possible other implementations> | \ |
|____________________________________| \ |
▲ ▲ \ |
| | \ |
| | \ |
_________________ ______________________ \ _____________________
| SpriteAnimation | | SpriteAnimationFrame | └---| CustomizableControl |
|_________________| |______________________| |_____________________|
▲ ▲
| |
| |
________ _____________
| Sprite | | SpriteFrame |
|________| |_____________|
Проблема довольно ясна: разделение деревьев объектов CustomizableObject и CustomizableControl --- и вставка UserControl в одно, но не в оба дерева.
Нет практического смысла переносить реализацию CustomizableObject в его производные классы, поскольку реализация не зависит от класса. Более того, было бы очень сложно реализовать это несколько раз. Так что я действительно не хочу делать CustomizableObject интерфейсом. Интерфейсное решение для меня не имеет никакого смысла. (Если честно, интерфейсы никогда не имели для меня особого смысла ...)
Итак, я повторяю, у кого-нибудь есть блестящие идеи? Это настоящий маринад. Я хотел бы больше узнать о том, как заставить интерфейсы работать с моим деревом объектов, а не против него. Я делаю этот простой движок спрайтов, используя WPF и C # в качестве серьезного упражнения, больше всего на свете. Это так легко решить на C ++, но мне нужно выяснить, как решить эти проблемы в управляемой среде, вместо того, чтобы поднимать руки вверх и возвращаться к Win32 всякий раз, когда становится трудно.