OOP - der beste Ansatz zum Hinzufügen von Eigenschaften zur Klasse

8

Wir entwickeln eine HR-Anwendung, die in Java geschrieben und mit Hibernate gemappt ist; Eines der Merkmale ist die Rekrutierungsphase.

Die Klasse Candidate wird wie folgt modelliert:

%Vor%

Da wir für einen Markt nur bis jetzt entwickelt haben, hängt der Code sehr von einer bestimmten Gesetzgebung ab, sehen Sie sich die Eigenschaft fiscalCode an.

Die Anforderung ist, dass wir dieses Konzept verallgemeinern, um auf andere Märkte expandieren zu können, wo zum Beispiel der eindeutige Bezeichner anders sein kann, aus mehreren Strings bestehen kann oder gar nicht vorhanden ist.

Das erste, was mir in den Sinn kam:

1 - Benennen Sie das Feld einfach als "countryIdentifier" um und fügen Sie bei Bedarf weitere Felder für bestimmte Länder hinzu.

%Vor%

Dies bedeutet Refactoring des Codes wo benötigt (all das platziert wo der alte italianFiscalCode verwendet wird), umbenennen einer DBMS Spalte (und fügt eventuell weitere hinzu) und modifizieren alle Abfragen, die dieses Feld benutzen.

Das sieht für mich wie eine schlechte Implementierung aus

2 - Unterklasse Candidate creating ItalianCandidate und GreekCandidate und verschiebt das bestimmte Feld in den Unterklassen.

Das Problem ist, dass die Candidate -Klasse bereits von HeavyCandidate unterkonstruiert ist, die die einzige Funktion hat, das Hibernate-Mapping zu optimieren, da wir alle "schweren" Eigenschaften (Viele-zu-Einsen und Mengen) im Heavy bewegen Klasse (dies ist ein Ansatz, dem wir mit allen unseren Beans folgen).

Was ist in dieser Situation der richtige Ansatz?

    
frankieta 20.11.2016, 21:51
quelle

3 Antworten

1

Ich denke, ein guter Weg, dies zu tun, ist eine abstrakte Klasse zu machen. Dadurch stellt es ein generisches Framework für jedes Kandidatenobjekt bereit und impliziert auch, dass bestimmte Methoden in den Erweiterungsklassen enthalten sein müssen. Dies funktioniert auch mit Konstruktoren, und es ist eine gute Möglichkeit, eine generische Gliederung zu erstellen.

%Vor%     
FaceFTW 19.01.2017 01:43
quelle
0

Das Beste, was ich tun kann, ist, die Klasse zu erweitern und die Unterklassen zu erstellen.

Dann können Sie den Klassen die erforderlichen Felder hinzufügen.

Also

%Vor%

Erstellen Sie eine separate Tabelle für die Beziehungszuordnung zwischen Kandidaten und anderen griechischen Kandidaten.

Indem Sie dies übernehmen:

  1. Sie würden Doppelungen von Code verhindern.
  2. Sie würden sich an die Hauptprinzipien von OOP halten und eine Hierarchie beibehalten. Dies kann ein gutes Beispiel sein.
  3. Auf diese Weise müssen Sie die aktuelle Klasse und Tabellen nicht ändern. Das ist immer eine gute Sache.
Pritam Banerjee 20.11.2016 22:03
quelle
0

Ich würde eine Schnittstelle Identifier (nicht sicher über den Namen) erstellen, die von Klassen wie GreekIdentifier und ItalianIdentifier implementiert wird. Dann würde ich ein Feld zu Candidate hinzufügen:

%Vor%

Die Implementierung von GreekIdentifier würde dann ungefähr so ​​aussehen:

%Vor%

Wenn countryIdentifier wirklich etwas ist, was alle Bezeichner haben, können Sie es sogar in eine (abstrakte) Basisklasse verschieben.

    
Todd Sewell 20.11.2016 22:01
quelle