[英]Add multiple classes data in single class using SOLID design pattern
我有Product
, Item1
和Item2
類。目標是將產品類中的所有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.