2009-06-10 8 views
0

So habe ich eine Anwendung, deren Hauptzweck es ist, Kunden zu verwalten. Mein Problem ist, dass ich nicht sicher bin, wie man alles zusammenhält, das mit dem Kunden zusammenhängt? Nehmen wir an, dass ein Kunde eine unbegrenzte Anzahl von E-Mails haben kann. Im Folgenden finden Sie, was ich Vorstellungsvermögen:Kundenklasse mit mehreren Entitäten verbunden

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]")); 

ich zu diesem Entwurf Ziel bin, weil diese Art und Weise, sage ich Kunden an ein Unternehmen Vertreter zugeordnet machen muss ich einfach ein anderes Mitglied der Liste hinzufügen könnte. Außerdem habe ich versucht zu googeln, aber ich bin nicht wirklich sicher, wie dieses Problem genannt wird.

Hier sind einige der Dinge, die ich bin nicht sicher:

  • Wie Fels in der Brandung ist das Design?
  • Wenn ich neue Entitäten zur Kundenklasse hinzufüge, würde es nicht ein bisschen groß werden in Bezug darauf, wofür es verantwortlich ist?

Vielen Dank.

+1

Sein ist, viele Stunden, da Sie die Frage gestellt, und bekamen drei gute Antworten. Sie sollten zumindest eine oder mehrere der Antworten abstimmen und vorzugsweise eine der Antworten als "richtig" markieren. – abelenky

Antwort

0

Ihr Design sieht gut aus.

Wenn Kunden mehrere E-Mail-Adressen benötigen, ist es sinnvoll, die Customer-Klasse mit einer Liste von E-Mail-Objekten zu versehen.

Das einzige Problem ist, dass es keine Eindeutigkeit erzwingt, da mehrere Kunden nicht eine einzige E-Mail-Adresse teilen sollten. (oder vielleicht könnten sie? Kann Bob, Mike und Susan alle die E-Mail [email protected] ??)

+0

Die Eindeutigkeit von E-Mails wird durch das Formular vor dem Eingeben der Datenbank behandelt. – lengtche

0

Ich würde stimme mit ablensky. Weitere Informationen darüber, wie Sie diese Klasse entwickeln und welche Probleme auftreten, würden helfen, eine konkretere Antwort zu erhalten.

FYI: Die OO-Funktion, die Sie verwenden, ist Zusammensetzung, wenn das Hilfe ist.

0

Ihre Benennung ist fraglich. Ist "E-Mail" tatsächlich eine E-Mail-Adresse oder ist es der Text einer E-Mail-Nachricht? Von Ihrer Verwendung ist es offensichtlich eine Adresse, also möchten Sie vielleicht mit der rechten Maustaste-> Refactor-> umbenennen.

Warum kümmern Sie sich um eine Methode "E-Mails hinzufügen" oder "E-Mails abrufen"? Setzen Sie einfach eine öffentliche Getter-Eigenschaft frei.

Hier ist, wie ich es wahrscheinlich tun würde.

+0

BTW, wenn alles, was Sie jemals in einem "EmailAddress" -Objekt speichern, eine Zeichenfolge ist, verwenden Sie einfach die String-Klasse.Erstellen Sie keinen neuen Typ, um einfach einen String zu halten. Erwarten Sie, dass Personen die Daten missbrauchen, wenn es sich nicht ausdrücklich um eine "E-Mail" handelt? Achten Sie darauf, Ihre Variablen/Eigenschaften eindeutig zu benennen, und das sollte nicht passieren. – dss539

+0

Ich habe nur die E-Mail-Adresse für die Frage enthalten. Es sind 3-4 weitere Details mit jeder E-Mail-Adresse enthalten. – lengtche

0

Einverstanden, Ihr Design ist gut, es gibt kein Problem bei der Erstellung Ihres Objekts aus Daten besteht es aus wie Sie haben.

Wenn Sie vorsichtig sein möchten, ist es nicht erwünscht, dass Ihr Objekt irgendeine Geschäftslogik oder Datenzugriff usw. enthält, dann würde es für mehr verantwortlich sein, als sich selbst darzustellen.

ein Blick auf einziger Verantwortung hier Prinzip ein great article von Object Mentor

Verwandte Themen