Ich arbeite derzeit als Solo-Entwickler an meinem aktuellen Projekt. Ich habe das Projekt von einem anderen Entwickler geerbt, der das Unternehmen inzwischen verlassen hat. Es ist eine Webanwendung im Model-View-Controller-Stil in C #. Es verwendet Entity Framework für die objektrelationale Zuordnung. Und es gibt zwei verschiedene Klassen für die Typen im Domänenmodell. Ein Satz wird für die Interaktion mit dem ORM verwendet, der andere als Modell im MVC-System. Beispielsweise kann es zwei Klassen geben:
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
und
public class OrderModel{
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
public OrderModel( Order from){
this.Customer= from.Customer;
// copy all the properties over individually
}
public Order ToOrder(){
Order result =new Order();
result.Customer = this.Customer;
// copy all the properties over individually
}
}
Ich kann mir einige Nachteile dieses Ansatzes vorstellen (mehr Orte, an denen Code geändert werden kann, wenn sich etwas ändert, mehr Objekte im Speicher, mehr Zeit für das Kopieren von Daten), aber ich bin mir nicht sicher, welche Vorteile hier liegen. Mehr Flexibilität für die Modellklassen, nehme ich an? Aber ich könnte das erreichen, indem ich auch die Entitätsklassen unterklassifiziere. Meine Neigung wäre, diese beiden Klassengruppen zusammenzuführen oder möglicherweise die Modellklassen Unterklassen der Entitätsklassen zu sein. Vermisse ich hier etwas Wichtiges? Ist dies ein allgemeines Designmuster, das mir nicht bekannt ist? Gibt es gute Gründe, den Refactor, über den ich nachdenke, nicht durchzugehen?
AKTUALISIEREN
Einige der Antworten hier lassen mich erkennen, dass meiner anfänglichen Beschreibung des Projekts einige wichtige Details fehlten. Es gibt auch eine dritte Gruppe von Klassen im Projekt: die Seitenmodellklassen. Sie werden tatsächlich als Modell für die Seite verwendet. Sie enthalten auch Informationen, die für die Benutzeroberfläche spezifisch sind und nicht mit einer Bestellung in der Datenbank gespeichert werden. Eine beispielhafte Seitenmodellklasse könnte sein:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
Ich sehe den Nutzen dieser dritten Gruppe hier völlig anders und habe nicht vor, sie mit etwas anderem zusammenzuführen (obwohl ich sie vielleicht umbenennen könnte).
Die Klassen in der Modellgruppe werden derzeit auch von der API der Anwendung verwendet. Ich würde mich auch für Eingaben interessieren, ob dies eine gute Idee ist.
Ich sollte auch erwähnen, dass der Kunde, der hier als Zeichenfolge dargestellt wird, das Beispiel vereinfachen sollte, nicht weil es tatsächlich so im System dargestellt wird. Das tatsächliche System hat den Kunden als einen bestimmten Typ im Domänenmodell mit seinen eigenen Eigenschaften