4 Stimmen

Neuling Ansicht Modell Problem.. zu subclass oder nicht zu subclass

Ok tot grundlegende Frage, ich bin ein autodidaktischer Entwickler so oft scheine ich Lücken zu haben, wo ich nicht entscheiden kann, was der richtige Weg ist... und dies ist einer von ihnen! Einfach habe ich eine Ansicht Modell, das eine Sammlung von Kind Elemente hat. Aber wo diese Klassen definiert sind, kann ich nicht entscheiden, ob das untergeordnete Objekt eine Unterklasse des übergeordneten Objekts sein soll...

Zum Beispiel dies:

public class ActionChartViewModel
{
    public IEnumerable<ActionChartItemViewModel> Items { get; set; }
    public TextPagingInfo TextPagingInfo { get; set; }
}

public class ActionChartItemViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Rating { get; set; }
    public string Comment { get; set; }
    public string AssignedToUserName { get; set; }
    public string ContactRequested { get; set; }
    public bool Resolved { get; set; }
    public int NoteCount { get; set; }
    public string ContactDetails { get; set; }
    public int ResponseId { get; set; }
}

Oder dies:

public class ActionChartViewModel
{
    public IEnumerable<Item> Items { get; set; }
    public TextPagingInfo TextPagingInfo { get; set; }

    public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Rating { get; set; }
        public string Comment { get; set; }
        public string AssignedToUserName { get; set; }
        public string ContactRequested { get; set; }
        public bool Resolved { get; set; }
        public int NoteCount { get; set; }
        public string ContactDetails { get; set; }
        public int ResponseId { get; set; }
    }
}

Ich bevorzuge die zweite Variante aus Gründen der Code-Lesbarkeit und Einfachheit, aber ich kenne die Vor- und Nachteile von Unterklassen nicht. Was würden Sie Jungs denken?

Vielen Dank im Voraus!!

3voto

muratgu Punkte 7079

Ich würde getrennte Klassen (in derselben Datei) im Gegensatz zu einer inneren Klasse verwenden. Eine innere Klasse wäre nützlich, wenn sie nur der übergeordneten Klasse dient, d. h. wenn auf sie nicht von außerhalb der übergeordneten Klasse zugegriffen wird, sondern nur von den Methoden der übergeordneten Klasse usw. In Ihrem Fall muss die innere Klasse in der/den Ansicht(en) verwendet werden, daher sehe ich keine Notwendigkeit dafür. Die erste Option, d.h. getrennte Klassen, ist für mich eigentlich einfacher und liest sich besser.

1voto

Felipe Oriani Punkte 36826

"Unterklasse" bedeutet, dass Sie konkretere Implementierungen (Erben) ihrer Typen erstellen. Wie @ bloparod sagt, machst du "innere Klassen". Ich verwende auch selten innere Klassen. Manchmal verwende ich einige private o internal classe als vorübergehend. Wenn Sie das tun, müssen Sie mit der sintaxe wie zu erstellen:

ActionChartViewModel.Item item = new ActionChartViewModel.Item(); 

Normalerweise trenne ich die Dateien und verwende public Klassen, aber manchmal, wenn ich viele, viele ViewModels habe, denke ich, dass es eine gute Praxis ist, alle ViewModels der gleichen Kategorie in einer einzigen Datei zu halten und bei Bedarf zu vererben, zum Beispiel:

Datei: ProductViewModel.cs

public class ProductViewModel 
{
   public int Id { get; set; }
   public string Name { get; set; }
   public decimal Price { get; set; }
   public string CategoryName { get; set; }
}

public class ProductDetailViewModel : ProductViewModel 
{
   public int Stocke { get; set; }
   public string Obs { get; set; }
   public IEnumerable<ProductMovViewModel> Inventory 
   /* other properties */
}

public class ProductMovViewModel 
{
   public int Id { get; set; } 
   public DateTime Date { get; set;
   public int Amout { get; set; }
}

Sie können Ihre ViewModels auch nach Belieben in Dateien aufteilen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X