簡體   English   中英

使用SOLID設計模式在單個類中添加多個類數據

[英]Add multiple classes data in single class using SOLID design pattern

我有ProductItem1Item2類。目標是將產品類中的所有Items整合到一個列表中,以便它們可以在客戶端的網站上進行排序和顯示。我希望在C#中使用SOLID原則

public class Product
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
    }
and here are list of datas are in this class
-- var list1 = new List<Item1>();
public class Item1
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }
-- var list2 = new List<Item2>();
public class Item2
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

任何幫助,將不勝感激。

使用ViewModel處理您的顯示問題。 這尊重單一責任原則。 ViewModel的職責是顯示數據並驗證用戶填寫的<form>輸入(如果有)。 要顯示的數據可以從許多來源匯總。

使用持久化實體/域實體/數據傳輸對象與ViewModel之間的映射。 定義從每個源類到ViewModel的映射。 強烈建議使用AutoMapper等庫。

例如:

public class ProductDetailsViewModel {
    // Display attribute as an example of a view concern
    [Display(Name = "ProductDetails_Name", ResourceType = typeof(Resources))]
    public string Name {get; set;}
}

public class ProductListViewModel {
    public IEnumerable<ProductDetailsViewModel> ProductDetails {get; set;}
}


// Example of mapping by hand:
var item1 = new Item1();
var item2 = new Item2();
var vm1 = new ProductDetailsViewModel { Name = item1.Name };
var vm2 = new ProductDetailsViewModel { Name = item2.Name };
var productList = new ProductListViewModel {ProductDetails = new [] {vm1, vm2}}; 

假設您要覆蓋產品的值以及具有子項列表,我建議您將要覆蓋的值聲明為虛擬,並使另一個類可用,也可以根據需要獲取項目列表,同時繼承自父產品表。

    public class Product
    {
        public virtual Guid Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Type { get; set; }
    }

    public class ProductFull : Product
    {
        public override Guid Id { get; set; }
        public override string Name { get; set; }
        public override string Type { get; set; }

        public List<Item1> Item1s { get; set; }

        public List<Item2> Item2s { get; set; }
    }

    public class Item1
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

    public class Item2
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

來自MSDN:

除了聲明和調用語法的差異之外,虛擬屬性的行為類似於抽象方法。 在靜態屬性上使用虛擬修飾符是錯誤的。 通過包含使用override修飾符的屬性聲明,可以在派生類中重寫虛擬繼承的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM