Ringabhängigkeit
-
Guten Tag,
in meiner Solution sind 2 Projekte von einander abhängig. Ich wüsste jetzt aber nicht wie ich das Problem beheben könnte, außer über ein neues Projekt, dass als Brücke dient, was ich aber hässlig fände.Ich habe die Klasse XmlDataController, die für das Verwalten von Xml Dateien zuständig ist.
static public class XmlDataController { static public IEnumerable<Spell.Spell> ReadAllSpells() { XDocument xdoc = XDocument.Load("Datenbank.xml"); var allspells = from s in xdoc.Elements("Spell") select new Spell.Spell ( //... ); return allspells; } }
Diese Methode gibt mir dann eine Liste aller Spells zurück. Da ich eine Liste mit Objekten zurückgebe, ist mein XmlDataController auf die Spell-Klasse angewiesen. Meine Spellbook-Klasse ist aber wiederum auf den XmlDataController angewiesen, da sie sonst nicht ihre Spell's abspeichern kann.
public class Spellbook { public List<Spell> SpellList { get; private set; } public Spellbook() { SpellList = XmlDataController.ReadAllSpells(); } }
Die Spell-Klasse und Spellbook-Klasse sind in einem Projekt.
Hätte jemand vielleicht eine Idee, wie man dieses Problem gekonnt umgehen könnte? Vielleicht durch umformen oder einen Umweg, wie auch immer...
Mit freundlichen Grüßen : Freaky
-
Das Design scheint mir ein wenig falsch zu sein. Wieso sollte ein
XmlDataController
etwas über einSpell
Objekt wissen müssen? Das lesen vonSpells
gehört doch eher in das Projekt mit demSpell
rein und dort wird dannXmlDataController
verwendet?Grüssli
-
Du meinst also das ich XmlDataController zu einem Interface machen soll und in der Spell-Klasse dann das ReadAllSpells implementiere? Klingt eigentlich besser.
-
FreakY<3Cpp schrieb:
Du meinst also das ich XmlDataController zu einem Interface machen soll und in der Spell-Klasse dann das ReadAllSpells implementiere? Klingt eigentlich besser.
Ich weiss nicht, ob du es zu einem Interface machen solltest, da ich gar nicht weiss, was XmlDataController tut. Ich habe mich nur am Namen orientiert und dadurch folgendes geschlussfolgert:
1. Projekt
Bietet Hilfsmittel für die Verwaltung/Kontrolle von XML Daten.2. Projekt
Definiert Spell und verwaltet diese Zaubersprüche.Da erscheint es mir irgendwie vernünftig, wenn das 2. Projekt mit Hilfe des 1. Projekts auch einen
XmlSpellReader
zur Verfügung stellt, schliesslich befindet sich die Verwaltung der Zaubersprüche im 2. Projekt. Die XML Daten Verwaltung/Kontrolle interessiert es nicht, was sie repräsentiert, sie ist nur für die XML Daten da.War das verständlich? Mir ist erscheint das irgendwie so logisch, dass ich mühe habe, eine vernünftige Erklärung hinzuschreiben
Grüssli
-
Hehe, nein ist schon okay. Ich hab das jetzt folgenderweiße geregelt:
//Projekt.Interface.Xml public interface IXml<T> { XDocument ToXml(); IEnumerable<T> ReadData(); }
//Projekt.Spell public class Spellbook : Interface.Xml.IXml<Spell> { //... public IEnumerable<Spell> ReadData( { XDocument xdoc = XDocument.Load("Datenbank.xml"); var allspells = from s in xdoc.Elements("Spell") select new Spell ( //... ); return allspells; } }