2009-06-10 12 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です。あなたは、少なくとも1つ以上の回答をアップアップし、回答の1つを「正しい」とマークすることが望ましい。 – abelenky

答えて

0

デザインはきれいです。

お客様が複数のメールアドレスを必要とする場合は、Customerクラスにメールオブジェクトのリストが含まれているようにすると完全に理解できます。

唯一の問題は、複数の顧客が単一の電子メールアドレスを共有してはならないという点で、一意性を強制しないことです。 (または可能かもしれませんか?ボブ、マイク、スーザンはすべて電子メール[email protected]ですか?)

+0

電子メールの一意性は、データベースに入る前に送信フォームによって処理されます。 – lengtche

0

私はablenskyに同意します。 このクラスをどのように開発するのか、遭遇している問題についての詳細は、より具体的な答えを得るのに役立ちます。

FYI:あなたが使用しているOO機能は、それが何らかのヘルプであれば合成です。

0

あなたの名前は疑問です。 「電子メール」は実際に電子メールアドレスですか、それとも電子メールメッセージのテキストですか?あなたの使用法からは明らかにアドレスなので、リファクタリング→名前の変更を右クリックしてください。

「電子メールを追加する」または「電子メールを受信する」という方法をお困りですか?パブリックゲッタープロパティを公開するだけです。

ここで私はおそらくそれをやっています。

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

btw、 "EmailAddress"オブジェクトに格納しているのが文字列の場合は、文字列クラスを使用してください。文字列を保持するためだけに新しい型を作成しないでください。明示的に「電子メール」でない場合、人々がデータを誤用することが予想されますか?変数/プロパティの名前をはっきりと明記してください。 – dss539

+0

質問のために電子メールアドレスのみを記載しました。各メールアドレスには3〜4のその他の詳細が含まれています。 – lengtche

0

あなたのデザインは良いですが、あなたが持っているデータからオブジェクトを構築する上で問題はありません。

あなたは、あなたのオブジェクトにビジネスロジックやデータアクセスなどが含まれないようにしたいと思っています。

は、ここでは単一責任の原則を見てください、あなたが質問をし、そして3つの良い答えを得たので、オブジェクトメンター