2009-06-10 48 views
0

因此,我有一個主要目的是管理客戶的應用程序。我的問題是,我不確定如何將與客戶相關的所有內容捆綁在一起?爲了這篇文章,讓我們假裝一個客戶可以有無限數量的電子郵件。下面是我在設想:與多個實體關聯的客戶類別

class Customer { 
    private int id; 
    private String name; 
    private List<Email> emails = new List<Email>(); 

    public Customer(id, name) { 
    this.id = id; 
    this.name = name; 
    } 

    public addEmail(Email email) { 
    emails.Add(email); 
    } 

    public getEmails() { 
    return emails; 
    } 
} 

class Email { 
    string email; 

    public Email(email) { 
    this.email = email; 
    } 
} 

Customer newCustomer = new Customer(123, "Dummy Customer"); 
newCustomer.addEmail(new Email("[email protected]")); 

我的目標實現這個設計,因爲這樣一來,說我需要關聯到公司的代表,我可以簡單地增加一個列表成員的客戶。另外,我嘗試了谷歌搜索,但我不確定這個問題被稱爲什麼。

這裏有一些事情我不確定:

  • 如何堅如磐石的是這樣的設計?
  • 當我將新實體添加到客戶類中時,它是否會在它負責的方面變得有點大?

謝謝。

+1

它是一種great article了很多時間,因爲你問的問題,並得到了三個好答案。您至少應該投出一個或多個答案,並且最好將其中一個答案標記爲「正確」。 – abelenky 2009-06-11 06:00:24

回答

0

您的設計看起來不錯。

如果客戶需要多個電子郵件地址,比讓Customer類包含一個Email對象列表更有意義。

唯一的問題是它不強制唯一性,因爲多個客戶不應共享一個電子郵件地址。 (或者他們可以嗎?鮑勃,邁克和蘇珊都可以發郵件[email protected] ??)

+0

在輸入數據庫之前,電子郵件的唯一性由提交表單處理。 – lengtche 2009-06-10 21:12:59

0

我同意ablensky。 有關您將如何開發此課程以及遇到的問題的更多信息將有助於獲得更具體的答案。

供參考:你使用的OO功能是組合,如果這是任何幫助。

0

你的命名是有問題的。 「電子郵件」實際上是一個電子郵件地址,還是電子郵件的文本?從你的使用,這顯然是一個地址,所以你可能想要右鍵單擊 - >重構 - >重命名。

爲什麼你打擾「添加電子郵件」方法或「獲取電子郵件」方法?只公開一個公共getter屬性。

下面是我可能會這樣做。

class Customer 
{ 
    int id_; 
    string name_; 
    public IList<EmailAddress> EmailAddresses{get; private set;} 

    public Customer(int id, string name) 
    { 
     id_ = id; 
     name_ = name; 
     EmailAddresses = new List<EmailAddress>(); 
    } 
} 

var newCustomer = new Customer(123, "Dummy Customer"); 
newCustomer.EmailAddresses.Add(new EmailAddress("[email protected]")); 
+0

順便說一句,如果你所有存儲在「EmailAddress」對象中的是一個字符串,只需使用字符串類即可。不要僅僅創建一個新的類型來保存一個字符串。如果沒有明確的「電子郵件」,你是否預計人們會誤用這些數據?一定要清楚地說明你的變量/屬性,這不應該發生。 – dss539 2009-06-10 21:53:24

0

同意,你的設計是好的,從數據構建你的對象是沒有問題的,因爲你有。

如果你想要小心的是,你不希望你的對象包含任何業務邏輯或數據訪問等,那麼它將不僅僅是代表自己的責任。

看一看單一職責原則在這裏是從Object導師