J'ai une classe Java appelée TestExecutor qui est responsable de starting
un test. Démarrage du test implique plusieurs étapes:Bon exemple de conception orientée objet en Java
- Update test repository
- Locate the test script
- Create result empty directory
- Execute command
- Parse output
- Update database
Pour chacune de ces étapes que j'ai créé des méthodes privées dans la classe TestExecutor qui effectuent chacune des actions ci-dessus, le tout entouré d'un bloc try-catch. Je suis conscient que ce n'est pas un bon design car ma classe en fait trop et est également un test de douleur à l'unité en raison d'une grande quantité de fonctionnalités cachées dans des méthodes privées. Je voudrais entendre vos suggestions pour refactoriser cette classe car je ne sais pas comment s'éloigner de quelque chose de semblable à la structure ci-dessus. Exemple de code ci-dessous:
public void start() throws TestExecuteException {
try {
updateRepository();
locateScript();
createResultDirectory();
executeCommand();
parseOutput();
updateDatabase();
catch(a,b,c) {
}
}
private updateRepository() {
// Code here
}
// And repeat for other functions
Pourquoi vos méthodes sont-elles privées et non publiques? Il n'y a aucun problème à avoir plusieurs méthodes dans une seule classe tant que la classe a une seule responsabilité. – underdog
Il n'y a aucune raison pour que les méthodes soient appelées par quelque chose d'extérieur à TestExecutor donc j'ai décidé de les rendre privées. Mon problème est que la classe a une seule responsabilité générale (exécution de test) mais il y a plusieurs responsabilités en dessous (registre de mise à jour, script de localisation, etc.) – Adam
@Adam Veuillez passer en revue les réponses qui vous ont été fournies et commenter . Si l'une des réponses a été utile, vous pouvez les augmenter. Vous pouvez également accepter une réponse en cliquant sur la coche à côté de la réponse qui a été la plus utile. S'il vous plaît lire [Que dois-je faire quand quelqu'un répond à ma question] (http://stackoverflow.com/help/someone-answers). Voter est gratuit. Cela ne vous coûte rien. Accepter une réponse vous donne +2 rep. Alors ne sois pas timide. Allez-y et payez-le! – CKing