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