Ist das Duplizieren von Klassen jemals nützlich / gutes Design?
Es hat sich bewährt, eine separate Ansichtsmodellklasse für die Verwendung in der Benutzeroberflächenebene zu verwenden, anstatt dieselbe Klasse zu verwenden, die in der Datenebene verwendet wird. Ihre Benutzeroberfläche / Webseite muss möglicherweise andere Informationen anzeigen, die sich nicht ausschließlich auf die Datenentität beziehen. Indem Sie diese zusätzliche Klasse erstellen, geben Sie sich die Freiheit, die Benutzeroberfläche einfach zu optimieren, wenn sich die Anforderungen im Laufe der Zeit ändern.
Ich persönlich vermeide die Verwendung von AutoMapper aus drei Gründen:
Stille Ausfälle häufiger
Da AutoMapper automatisch zwischen Eigenschaften abbildet, wird die Eigenschaftszuordnung übersprungen, wenn ein Eigenschaftsname für eine Klasse und nicht für die andere Klasse geändert wird. Der Compiler wird es nicht wissen. Automapper ist das egal.
Fehlende statische Analyse
Sie haben also eine große Codebasis erhalten, mit der Sie sich befassen müssen. Es gibt eine Million Klassen mit einer Million Eigenschaften. Es sieht so aus, als ob sie nicht verwendet werden oder Duplikate sind. Mit dem Tool "Alle Verweise suchen" in Visual Studio können Sie feststellen, wo Eigenschaften verwendet werden, und in Ihrem Kopf eine Übersicht darüber erstellen, wie die gesamte Anwendung zusammen hängt. Warten Sie, es gibt keine expliziten Verweise auf die Hälfte der Eigenschaften, da Automapper verwendet wird. Mein Job ist jetzt um einiges schwieriger.
Späte Anforderungen, die die Komplexität erhöhen
Automapper funktioniert einwandfrei, wenn Sie nur die Werte aus EINER Klasse in eine andere Klasse kopieren möchten (wie dies häufig zu Beginn der Entwicklung der Fall ist). Erinnern Sie sich jedoch an die Anforderungen, die sich mit der Zeit ändern? Was ist, wenn Sie jetzt Werte von anderen Teilen Ihrer Anwendung abrufen müssen, möglicherweise spezifisch für den angemeldeten Benutzer oder einen anderen Kontextstatus?
Das AutoMapper-Muster zum Erstellen der Eins-zu-Eins-Klassenzuordnungen beim Anwendungsstart eignet sich nicht gut für diese Art von kontextspezifischen Änderungen. Ja, es gibt wahrscheinlich Möglichkeiten, es zum Laufen zu bringen, aber ich finde es normalerweise sauberer, einfacher und ausdrucksvoller, die Logik selbst zu schreiben.
Kurz gesagt, bevor Sie sich an Automapper wenden, um 30 Sekunden Zeit für die manuelle Zuordnung einer Klasse zu einer anderen zu sparen, sollten Sie darüber nachdenken.
Programmieren ist die Kunst, einem anderen Menschen zu sagen, was der Computer tun soll. - Donald Knuth
Fragen Sie sich vor diesem Hintergrund: "Ist AutoMapper heute hilfreich und wird es morgen sein?"