cześć
jest duzy XML -trzeba go przeprasować, w XmlReaderze we wszystkich przykładach jakoś ostrasza mnie ifologia
np:
if((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "Cube"))
{
if(xmlReader.HasAttributes)
Console.WriteLine(xmlReader.GetAttribute("currency") + ": " + xmlReader.GetAttribute("rate"));
}
przez ładne rozumiem utrzymywalne, testowalne, ladnie napisane, z małą liczbą ifów
co sądzicie o czymś takim - slownik nazwa węzła do Parsera (lub Funkcji parsującej)
var dict = new Dictionary<string, IElementParser> ();
if(xmlReader.NodeType == XmlNodeType.Element)
{
if( dict.TryGetValue(xmlReader.Name, var out parser))
{
parser.Parse(xmlReader);
}
}
Myślę tez aby wykorzystać DI kontener coś na zasadzie Command Handlerów dla typów, gdzie typem byłby parser danego elementu
class AddressParser : IElementParser<Address>
{
T Parse(XmlReader xmlReader){ return T}
}
//potem rejestorwać automatycznie tego typu klasy w DI kontenerze
//parser - reslove obiektu i parsowanie
if(xmlReader.NodeType == XmlNodeType.Element)
{
//get enum from string -> z xmlReader.Name na enum
var parser = scope.ServiceProvider.GetRequiredService(IElementParser<enumValue>);
parser.Parse(xmlRader);
}
Co myślicie o tych pomysłach?
Macie z tym jakieś doświadczenie?
z góry dziękuję za sugestie i odpowiedzi