2013-02-13 36 views
1

我用於創建一個屬性類,我將包括所有我的領域,必須寫所有的get/set屬性,然後有另一個數據庫類,我會使所有我的數據庫調用。使用get/set asp.net c#theres太多的屬性

Properties Class 
    private int _intCard 
    public int IntCard 
    { 
     set { _intcard = value;} 
    } 
Constructor here 

眼下這種不覺得自己是正確的做法,因爲我有超過120的屬性,我會處理的,似乎真的很費時有這些屬性中的每一個寫出來的。我將需要添加驗證的一些屬性是我選擇這種方式的原因,我可以在set方法中驗證它。任何人都可以提出一種替代方法,我可以研究完成相同的結果。

********************---------------******************* 

因此給出的評論我明白我的設計是有缺陷的,這是我想到這個問題。我對如何解決這個問題有一個想法,但不知道它是否是解決這個問題的正確方法。我搜索了「對象設計原則」並閱讀了它,但需要更多時間來掌握它教給我的東西。現在我想知道這種方法是否是正確的方式

我跟蹤申請人姓名,地址,電話號碼,傳真號碼,手機號碼,電話號碼,altaddress,配偶相同,然後是子女,引用,公司信息.....等等

我不會說謊我不明白抽象類爲了實現這個,如果這是我應該採取的方法我會花更多的時間來學習,但現在是希望這將是合適的。

性能等級將作爲跟隨 applicant.cs,applicantspouse.cs,applicantcontactinfo.cs,appreferences.cs ......

這是一起什麼我應該做的線?

再次感謝

+0

爲什麼不使用自動屬性代替..?如果你沒有對屬性做任何獨特的事情 – MethodMan 2013-02-13 12:36:24

+2

@DJKRAZE這是因爲他想在setter中執行驗證。但是,我建議可以使用帶數據註釋的自動屬性來執行驗證(儘管我也同意Brian的觀點,即120個屬性在單個類中似乎很多!) – 2013-02-13 12:38:09

+0

@DJKRAZE'Class.IntCard.set'必須聲明一個因爲它不被標記爲抽象或外部。自動實現的屬性必須同時定義get和set訪問器。' – StuperUser 2013-02-13 12:38:15

回答

0

通過閱讀它看起來像你至少需要兩個類的評論人,地址是這樣的:

public class Person 
{ 
    Guid Id {get; set;} 
    string Name {get; set;} 
    // ad infinitum the truely unique things that relate to an Individual 

    Address BusinessAddress {get; set;} 
    Address HomeAddress {get; set;} 
    Person Spouse {get; set;} 
} 

public class Address 
{ 
    Guid Id {get; set;} 
    Line1 {get; set;} 
    // ad infinitum all the truly unique things that relate to an address 
} 

以上基本上是僞代碼和不應該被解讀爲「這正是如何做到這一點」,我沒有例如說明屬性是私有/公共/保護還是確實提供了構造函數。

但它確實顯示瞭如何使用其他類作爲屬性,並且在「配偶」的情況下創建相當豐富和深入的對象層次結構(配偶可以包含地址和可能的另一個配偶 - 循環引用ahoy!),可以填充它並用於使代碼更具可讀性,並將代碼的責任分離出來,以將「概念/實體/域」封裝到一個單獨的單元中,而單元的工作就是「特定的事物」。可能值得關注OOP概念,如封裝,繼承等(基本上是面向對象的四個原則),以便感受一個對象應該代表什麼,這個鏈接有一個簡短的介紹,應該幫助你決定如何打破類和構造更多有用的對象。

http://codebetter.com/raymondlewallen/2005/07/19/4-major-principles-of-object-oriented-programming/

5

我不禁想到你的對象建模不在這裏。如果你有一個擁有120個屬性的類,那麼你還沒有將這個對象分成不同的角色/職責等。我會研究增加(顯着)你正在創建的類的數量,這樣你的解決方案變得更易於管理。

這不會減少您必須處理的屬性數量。這可能是值得考慮的不可變對象(你是否需要在施工期間設置這些屬性?),和/或使用Builder模式來輔助施工。

最後,你是否需要揭露這些屬性? OO的一個關鍵部分是告訴對象爲你做事,而不是獲取他們的內容和爲他們做事。如果你能告訴某個對象爲你做某件事,你很可能不需要公開他們的(內部)字段。

+0

+1'如果你有一個有120個屬性的類,那麼你沒有把這個對象分成不同的角色/職責等。「我完全同意你的看法 – 2013-02-13 12:43:17

+0

感謝你的迴應,這將是一個應用程序,記錄下個人的個人信息。如姓名,地址,電話,備用電話,公司名稱,配偶姓名,地址,電話......等等,似乎所有這些字段都將屬於一個類別的一部分。你能否提出一個小例子來分解你的意思。 – Tim 2013-02-13 12:45:10

+0

你是說即使它的一個應用程序與一個提交按鈕我會創建多個屬性類,如primaryapplicant.cs,spouseapplicant.cs,businessinfo.cs,references.cs ... – Tim 2013-02-13 12:51:22

0

在現代的C#版本有對性能的超緊湊sintax:

public class Properties { 
    public int IntCard { get; set; } 
} 

這裏C#爲您處理私有變量,這樣就可以避免很多的按鍵。要進行驗證,您可以使用數據註釋。更多信息here

希望它有助於

+0

感謝將看看數據註釋看起來像我需要將我的屬性從響應中分離出去 – Tim 2013-02-13 12:52:31

+0

是的,當然,具有很多屬性的單個對象幾乎總是指向初始設計時的問題,但是您應該從全局的角度來安排從您的架構來看。祝你好運!! ;) – diegoGarc 2013-02-13 13:00:12

0

請注意,這並沒有解決您的設計問題。如果您的數據庫位於sql-server上,爲了避免輸入,您可以使用類似這樣的查詢(請根據您的要求修改)以獲取包含數據類型的屬性列表,然後複製並粘貼結果。 SQL SERVER DEMO

SELECT 'public ' + CASE DATA_TYPE WHEN 'smallint' THEN 'short' 
       WHEN 'bit' THEN 'bool' 
       WHEN 'smalldatetime' THEN 'System.DateTime' 
       WHEN 'datetime' THEN 'System.DateTime' 
       WHEN 'date' THEN 'System.DateTime' 
       WHEN 'uniqueidentifier' THEN 'System.Guid' 
       WHEN 'varchar' THEN 'string' 
       WHEN 'int' THEN 'int' 
       WHEN 'numeric' THEN 'decimal' 
       ELSE DATA_TYPE END 
      + CASE IS_NULLABLE WHEN 'NO' THEN '' ELSE '?' END 
      + ' ' + COLUMN_NAME 
      + ' { get; set; }' AS def 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' 
ORDER BY IS_NULLABLE, ORDINAL_POSITION 
0

完全符合@布萊恩 - 阿格紐同意,如果你有一個在1班很多屬性,那麼你可能需要做一些重構,你幾乎可以肯定沒有關注不夠分離。

但是即使在重構之後,您仍然會擁有這些屬性,因此值得查看數據驗證屬性。例如,以下是使用MVC的步驟:http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs。然後,您可以使用auto-implemented屬性:

public int IntCard { get; set; } 
0

添,

根據您的編輯,你看起來就像你在正確的線路。這裏

public class Person 
    { 
     public string GivenName { get; set; } 
     public string Surname { get; set; } 
     public ContactInfo ContactInformation { get; set; } 
    } 

public class Applicant : Person 
    { 
     public Person Spouse { get; set; } 
     public List<Person> Children { get; set; } 
     public List<Reference> References { get; set; } 
    } 

public class ContactInfo 
    { 
     [Required] 
     [DataType(DataType.PhoneNumber)] 
     public string PhoneNumber { get; set; } 

     [DataType(DataType.EmailAddress)] 
     public string EmailAddress { get; set; } 

     public Address PrimaryAddress { get; set; } 
     public Address AlternativeAddress { get; set; } 
    } 

所以關鍵點,你是

  1. 類被分解成可管理的,可重複使用的塊
  2. 數據:您應該向下被打破性能到具體項目,例如註釋(必填& ContactType中的數據類型)用於驗證屬性
  3. 屬性不再需要顯式私有變量

P.S.有關數據說明多一點信息:http://msdn.microsoft.com/en-us/library/dd901590(v=vs.95).aspx

+0

不錯的工作 - 就在我面前! ; O) – bUKaneer 2013-02-13 15:57:25