Ich habe zwei Datenzugriffsobjekte, die umgekehrt generiert und für die Verwendung durch meine Anwendung jar'ed. Sie repräsentieren sehr ähnliche Tabellen. Eine Tabelle hat ein paar zusätzliche Spalten als die andere. Dies liegt außerhalb meiner Kontrolle aufgrund der Bedenken hinsichtlich der Geschäftseignung von Datenbanken.Entfernen von kopierten/eingefügten Code ohne eine Schnittstelle
Die Anwendung verfügt derzeit über zwei Implementierungen eines Repository, das auf diesen DAOs ausgeführt wird. Die Implementierungen sind sehr ähnlich. Es gibt einige zusätzliche Operationen, die den zusätzlichen Spalten auf dem zweiten DAO entsprechen. Eine Implementierung ist jedoch mit nur wenigen Ausnahmen ein Kopieren und Einfügen des anderen. Die Implementierungen sind Hunderte von Zeilen lang.
Also wollte ich den Copy/Paste Job entfernen. Idealerweise könnte ich einfach eine Schnittstelle vor die DAOs kleben und dann vielleicht eine abstrakte Klasse verwenden, um den gemeinsamen Code zu halten (fast alles). Ich kann jedoch keine Schnittstelle vor den DAOs setzen. Denken Sie daran, dass sie umgekehrt generiert werden, und ohne die ORM-Software zu aktualisieren, halte ich dies nicht für eine vernünftige Wahl (Kodo 3.x, glaube ich, dies zu ändern ist nicht im Umfang).
Das einzige, was ich mir vorstellen kann, dass sogar funktionieren würde, ist etwas Gemeinheit mit Reflexion, aber das führt zu etwas viel schlimmer als ich jetzt habe.
Irgendwelche cleveren Lösungen?
bearbeiten: Hier wird sehr verwässerte Codebeispiel
package one.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... 50 more just like this
}
package two.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... the same 50 more as above
getSomethingElse(..); //doesn't exist in one.dao.UserDao
setSomethingElse(..); //doesn't exist in one.dao.UserDao
}
class RepositoryOne(one.dao.UserDao userDao) {
//insert code here. perform operations on nearly all methods, lots of code
}
class RepositoryTwo(two.dao.UserDao userDao) {
//insert code here. same as Repository one
//some extra code that isn't above, maybe 10 lines
}
Können Sie ein einfaches \ verwässertes Codebeispiel posten? – javamonkey79