2016-11-22 111 views
0

我产生2类是这样的:如何正确设计嵌套类?

public class mPromotionDetail 
{ 
    public long PromotionDetailId { get; set; } 
    public long PromotionHeaderId { get; set; } 
    public long PromotionTypeId { get; set; } 
    public string PromotionTypeName { get; set; } 
    public string VendorCode { get; set; } 
    public string VendorName { get; set; } 
    public bool Active { get; set; } 
    public List<mPromotionDetailArticle> RequestDetailArticles { get; set; } 

    public static List<mPromotionDetail> Get(long PromotionDetailId = 0, long PromotionHeaderId = 0, long PromotionTypeId = 0, string VendorCode = "", bool Active = true) 
    { 
     try 
     { 
      Hashtable htParam = new Hashtable(); 
      htParam.Add("@PromotionDetailId", PromotionDetailId); 
      htParam.Add("@PromotionHeaderId", PromotionHeaderId); 
      htParam.Add("@PromotionTypeId", PromotionTypeId); 
      htParam.Add("@VendorCode", VendorCode); 
      htParam.Add("@Active", Active); 

      DataSet ds = DB.ExecuteSP_Ds("udsp_GetPromotionDetail", htParam); 
      return ds.Tables[0].AsEnumerable().Select(row => new mPromotionDetail 
      { 
       PromotionDetailId = row["PromotionDetailId"], 
       PromotionHeaderId = row["PromotionHeaderId"], 
       PromotionTypeId = row["PromotionTypeId"], 
       PromotionTypeName = row["PromotionTypeName"], 
       VendorCode = row["VendorCode"], 
       VendorName = row["VendorName"], 
       Active = row["active"], 
       RequestDetailArticles = mPromotionDetailArticle.Get(PromotionDetailId: Shared.NtL(row["PromotionDetailId"]), Active: true) 
      }).ToList(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
} 

public class mPromotionDetailArticle 
{ 
    public long PromotionDetailArticleId { get; set; } 
    public long PromotionDetailId { get; set; } 
    public string ArticleCode { get; set; } 
    public string ArticleDescription { get; set; } 
    public long Qty { get; set; } 
    public string UoM { get; set; } 
    public decimal NormalPrice { get; set; } 
    public decimal SpecialPrice { get; set; } 
    public bool Active { get; set; } 

    public static List<mPromotionDetailArticle> Get(long PromotionDetailArticleId = 0, long PromotionDetailId = 0, long PromotionHeaderId = 0, bool Active = true) 
    { 
     try 
     { 
      Hashtable htParam = new Hashtable(); 
      htParam.Add("@PromotionDetailArticleId", PromotionDetailArticleId); 
      htParam.Add("@PromotionDetailId", PromotionDetailId); 
      htParam.Add("@PromotionHeaderId", PromotionHeaderId); 
      htParam.Add("@Active", Active); 

      DataSet ds = DB.ExecuteSP_Ds("udsp_GetPromotionDetailArticle", htParam); 
      return ds.Tables[0].AsEnumerable().Select(row => new mPromotionDetailArticle 
      { 
       PromotionDetailArticleId = row["PromotionDetailArticleId"], 
       PromotionDetailId = row["PromotionDetailId"], 
       ArticleCode = row["ArticleCode"], 
       ArticleDescription = row["ArticleDescription"], 
       Qty = row["Qty"], 
       UoM = row["UoM"], 
       NormalPrice = row["NormalPrice"], 
       SpecialPrice = row["SpecialPrice"], 
       Active = row["active"] 
      }).ToList(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
} 

注意ExecuteSP_Ds只是叫我的SQL SP并返回DataSet。 这工作得很好。但是如果mPromotionDetail.Get返回很多行(例如:1000行),这意味着将执行同样多的时间。

有没有什么方法可以更合适和更有效地设计这些?

谢谢

+0

你应该阅读关于设计模式,坚实的原则,这些都是开始的好地方。 –

回答

0

你可以从你的实体,一些很好的解耦数据库代码开始,和测试的方式来做到这一点是通过使用一些以下模式:

  • 的DAO

要做进一步的研究,我建议你阅读这篇文章: MSDN - Persistence Patterns

这里还提到了Lazy和Eager加载,这样可以最大限度地减少数据库调用的工作量和大小。

最后,它是对你有好处阅读有关SOLID原则,一些好的地方是:

0

如果我们对数百/千在你调用这些特效的行之前,考虑让特效制作分页参数(例如pageNumber,rowsPerPage)。然后修改你的proc来使用这个分页参数。您可以在SO中搜索如何在查询中应用分页。

您的其他选择是让您的proc返回多个结果集,然后在代码中执行主要细节数据的对象映射。