Je travaille actuellement sur une base de code où il y a quelques classes de variables, telles que les chemins de base de données, qui sont simplement représentés comme des chaînes. La plupart des opérations sur ces types (non) sont définies dans une classe d'utilité. P>
J'ai créé une nouvelle classe pour représenter une base de données, avec des opérations définies comme des méthodes d'instance, dans le style de OUP traditionnel. Cependant, il est tout à fait laborieux de passer par le grand codeBase et de le refactuer pour utiliser les nouveaux types. Quelqu'un a-t-il des conseils sur la manière de le faire rapidement et efficacement? P>
4 Réponses :
Les chemins de base de données sonnent comme ils devraient être des ficelles pour moi. Qu'est-ce qui a du sens? Et ils doivent être extérieurs, soit dans des fichiers de configuration, soit dans une base de données. C'est le moins de vos problèmes. P>
La persistance a été tellement de temps sur (par ex. hibernate, printemps JDBC, Ibatis, etc.) que je me demandais comment vous pourriez éventuellement améliorer sur eux. Si vous devez aller à la peine de refactoring - et vous devez - je conseillerais d'utiliser tout ce que vous avez fait. P>
Si vous devez écrire quelque chose, Google pour "Generic Dao". Vous obtiendrez des choses comme ceci: p>
http://www.ibm.com/developerworks/ java / bibliothèque / j-genericdao / index.html p>
Si votre travail n'est pas modelé après quelque chose comme ça, jetez-le et repensez les choses. P>
La voie directe d'utiliser Hibernate, le printemps, etc. pourrait ne pas être la meilleure, il peut donc y avoir des raisons valables d'une étape basée sur le code propre. J'ai moi-même vu cela plusieurs fois. L'enseignement de l'hibernation et du printemps est également beaucoup d'effort.
Je suis d'accord avec Hibernate - je ne le recommanderais pas à personne. Mais je ne pouvais plus être en désaccord avec Spring JDBC. C'est mort simple et bien conçu. Vous pouvez utiliser des parties du printemps sans avoir à maîtriser tout cela.
migrer la classe de services publics pour utiliser votre nouvelle classe. Ensuite, les méthodes de classe de services publics ne doivent contenir que deux déclarations. Un pour créer votre classe et l'autre invoque votre classe. Après cela, vous pouvez aligner les méthodes de classe de services publics, éliminant ainsi le besoin de celui-ci. P>
Lorsque vous avez terminé avec cela, vous devez rechercher un moyen de ne pas instancer votre nouvelle classe encore et encore. Cela devrait être fait en refactorisant la variable locale à un champ d'instance initialisé à la durée de la construction. P>
J'essaie généralement d'isoler les chaînes à la limite de la limite de l'application / de la limite de processus, telle que lorsqu'elles sont extraites d'une base de données ou reçues via une opération Web. P>
à cette application / la limite de processus est souvent l'endroit idéal pour mapper / convertir / désérialiser les chaînes en un modèle d'objet plus approprié, tel que supporté par toute langue que vous utilisez. p>
De même, le modèle d'objet peut être mappé / converti / reconverti sur le formulaire de chaîne car il quitte la limite d'application / processus. P>
Il convient de noter que cette dactylographie à fil peut être un peu subtile. Je vois couramment XML introduisant dans les couches d'application et de domaine. Un exemple similaire à partir de l'espace .NET ne parviendrait pas à mapper Ado.net Datables (avec leurs noms de colonne de chaîne et leurs valeurs de champ non typa) dans des classes / objets à peu près dès qu'ils sont reçus. Je ne doute pas qu'il y a beaucoup d'équivalents similaires dans le monde de Java. Stringly Ticing n'est pas seulement limitée aux valeurs de date, car la blague va. P>
Une technique que j'ai utilisée dans C # (et juste porté à Java - excuses si j'ai commis une erreur, je suis nouveau à Java) consiste à créer des classes stresslytyped, par exemple. une classe de base puis de la classe dérivée p> et utilisation p> public void Foo(UserName username, Password password, DatabasePath db, TableName table...)
Ni stockant des chemins de base de données dans des variables ou la création d'une classe pour représenter une base de données avec des opérations définies dans les méthodes, son bon sens.