2009-02-27 6 views
0

Ich habe eine Klasse namens Player in der Business-Schicht meiner Webanwendung.Wann ist es am besten, eine neue Klasse zu verwenden, anstatt zu einer bestehenden Klasse hinzuzufügen

Spielerklasse Felder PlayerID, CategoryID und CountryID

Eine Funktion im Player-Klasse eine Funktion in PlayerDB Klasse ruft in der Data Access Layer, die wiederum eine gespeicherte Prozedur aufruft, die Daten zurückgibt für PlayerID, CategoryID (Fremdschlüssel in die Kategorie-Tabelle) und CountryID (Fremdschlüssel für die Country-Tabelle) aus der Player-Tabelle.

Ich habe jetzt eine Situation, wo ich Country Name und Country Image (URL-Pfad) zum oben genannten Anruf hinzufügen und die neuen Felder aus der Country-Tabelle für jede CountryID zurückgeben.

Meine Frage ist, füge ich den Landnamen und Land Bild als zusätzliche Felder der Player-Klasse oder habe ich neue Klassen namens Country (BLL) und CountryDB (DAL) und eine neue gespeicherte proc?

Ich möchte tun, was Best Practice ist und nicht der einfachste Weg.

Wenn es relevant ist, verwende ich ASP.NET, VB.NET und SQL2005.

Wie Sie wahrscheinlich sagen können, bin ich ein Neuling, also vergib mir, wenn ich nicht die richtige Terminologie in meiner Frage verwendet habe. Ich hoffe, du kommst auf die Idee.

Antwort

1

Sie könnten eine Länderklasse erstellen und mithilfe der Objektkomposition die Länderklasse zu einer Eigenschaft der Spielerklasse machen.

Public Property Country() as BLL.Country 
' etc 

Dann würden Sie die Methoden wie folgt aufrufen:

Dim p as BLL.Player 
a = p.Country.ID 
b = p.Country.Name 
c = p.Country.Image 
d = p.ID 
e = p.CategoryID 
1

Erstellen Sie eine neue Klasse. Wenn es als separate logische Einheit sinnvoll ist, sollte es eine eigene Klasse sein.

1

Es klingt wie Sie sollten wahrscheinlich eine neue Klasse erstellen.

Es hängt davon ab, was die Verwendung der Klasse "Player" ist. Wenn es sich um einen generischen Typ handelt (und es klingt wie es ist), der in verschiedenen Teilen Ihrer App verwendet wird, ist das Hinzufügen einer Anpassung für einen einzelnen Teil Ihrer App in die Player-Klasse wahrscheinlich eine schlechte Sache.

Wenn jedoch (z. B.) die Player-Klasse nur in einer einzigen Benutzeroberfläche in Ihrer App verwendet wurde und der Player nur für diesen Teil der App dargestellt werden sollte, kann das Hinzufügen dieser Felder sinnvoll sein machen.

0

Ich habe festgestellt, dass, wenn ich das fragen muss, die Antwort immer eine neue Klasse ist. Ich glaube nicht, dass ich jemals ein System mit zu vielen Klassen gesehen habe, oder mit zwei, die eigentlich eins hätten sein sollen.

Immer.

0

Wie werden Sie die Länderdaten benutzen? Wirst du immer player.getCountry().getName() schreiben? Wenn ja, könnten Sie eine Funktion player.getCountryName() schreiben, die intern country.getName() aufruft.

Schauen Sie in die Law of Demeter, die besagt, dass Sie begrenzen sollten, wie viel Ihre Anrufer über Ihre Interna wissen.