Witam, mam nadzieję że dobry dział bo zastanawiałem się też nad Newbie - jeśli zajdzie taka potrzeba to proszę o przeniesienie.

Piszę ponieważ mam następujący problem:
Tworzę klasyczny program do projektowania diagramów UML (wiem, że takie oprogramowanie już jest ale chcę to hobbistycznie zrobić) i chciałbym wykonać tą aplikację jak najlepiej również od strony kodu. Obecnie w celu uproszczenia zakładam że dostępne elementy będą następujące:
-klasa
-interfejs
-generalizacja
-implementacja
-agregacja
-asocjacja

Pomyślałem aby utworzyć 1 wspólną klasę abstrakcyjną dla wszystkich tych obiektów i poniższą strukturę:

user image

Jednak mam następujący problem ponieważ każdy z tych elementów jest graficznie trochę inaczej przedstawiany, na przykład interfejs nie ma pól itd więc każdy musiał by być inaczej wyświetlany - nie chcę tego obić na zasadzie miliarda ifów itd tylko w taki sposób aby potem łatwo możne było dodawać nowe elementy.

Jako że pracuję w środowisku .NET 4.5 oraz WPF to pomyślałem że elementy będą pakowane jako StackPanel do mojej klasy dziedziczącej po ContextControl, a w niej umieściłbym pole z interfejsem na przykład:

 public interface IDiagramElementDraw
{
	public StackPanel Draw();
}
 public MyContextControl
{
	private IDiagramElementDraw _drawingInterface;
	private StackPanel context;
	public DrawControl()
	{
		context = _drawingInterface.Draw();
	}
} 

Tylko czy teraz w jakiej klasie umieścić implementację takiego interfejsu? Nie chcę tego umieszczać w pojedynczych klasach Class, Interface, Gneralization bo przecież one nie powinny wiedzieć o tym jak powinny być rysowane bo one w moim założeniu maja tylko odpowiadać za logiczną reprezentację tych diagramowych obiektów.