2016-08-12 44 views
0

我有一個ServiceField類,其中包含FieldIdValue作爲兩個屬性。設置屬性值違反開關原則驗證

public class ServiceField 
    { 
     public int FieldId { get; set; } 
     public string Value { get; set; }   
    } 

     /// <summary> 
     /// This method is used to assign value to HajjPackageFields class 
     /// </summary> 
     /// <param name="hajPackageObj">HajjPackageFields whose value needs to be updated</param> 

     private void UpdateDetailFieldsValue(HajjPackageFields hajPackageObj) 
     { 
      foreach (ServiceField field in GetPackageDetails(hajPackageObj.PackageId)) 
      { 

       if (field.FieldId == (int)HajjServiceFieldsEnum.AccomodationView) 
       { 
        hajPackageObj.AccomodationView = field.Value == "1"; 
       } 
       else if (field.FieldId == (int)HajjServiceFieldsEnum.AirTicket) 
       { 
        hajPackageObj.AirTicket = field.Value == "1"; 
       } 
      } 
     } 

問題是,如果任何新的財產HajjPackageField類中添加比我修改我的UpdateDetailFieldsValue方法,它是針對開閉原則。有沒有其他適當的方法來完成這項任務?

+0

包含在上什麼課這種方法嗎? – Claies

回答

1

如果我清楚地瞭解你,反思,將有助於解決問題:

private void UpdateDetailFieldsValue(HajjPackageFields hajPackageObj) 
{ 
    var pairs = new Dictionary<int, string>();    
    foreach (var enumVal in typeof(HajjServiceFieldsEnum).GetEnumValues())    
     pairs[(int)(HajjServiceFieldsEnum)enumVal] = typeof(HajjServiceFieldsEnum).GetEnumName(enumVal);    

    foreach (ServiceField field in GetPackageDetails(hajPackageObj.PackageId))  
     typeof(HajjPackageFields).GetProperty(pairs[field.FieldId]) 
      ?.SetValue(hajPackageObj, field.Value == "1"); 
}