J'apprends les principes OO et pour la pratique je développe une application en Java. L'application consiste à analyser les fichiers texte d'historique des mains émis par les sites de poker après chaque main de poker et à extraire les mêmes types de données du fichier, quel que soit le site d'où provient l'historique des mains.OO Problèmes de conception
Les fichiers d'historique des mains peuvent être dans des formats très différents selon le site de poker. Certains sites ont chacun la main dans un style très lisible par l'homme, par exemple:
NL $0.25/$0.50 Texas Hold'em - Tuesday, June 22, 19:55:24 GMT 2010
et d'autres ont un style XML.
Ma question est: En analysant la ligne ci-dessus du texte, devrais-je avoir des classes séparées pour analyser chaque élément? Par exemple devrais-je avoir une classe StakesParser avec une méthode parseStakes() puis une classe CurrencyParser avec une méthode parseCurrency() etc. Ou devrais-je avoir une seule classe qui peut analyser cette ligne et obtenir tous les différents bits d'information?
Pour avoir une classe séparée pour chaque chose que je veux analyser semble plus OO, mais moins efficace. Aucun conseil? Ce que je veux à la suite du processus d'analyse est une classe GameState qui contiendrait toutes les informations pour une main de Poker. Donc, quel que soit le site de l'histoire de la main, je serais en mesure de faire un objet de type GameState avec toutes les informations pertinentes analysées par une classe HHParser. À cette fin, j'ai pensé que ce serait une bonne idée d'avoir une interface qui devrait être implémentée pour que le HHParser de chaque site de poker finisse par produire une classe GameState. Donc l'interface aurait des méthodes telles que parseStakes(), parseCurrency() etc. Est-ce la bonne approche? Ce qui me rend plus confus pour moi, c'est que sur des sites différents, l'information est dans un ordre différent, donc j'ai besoin d'une classe de contrôleur qui s'assure que chaque méthode est appelée dans le bon ordre en fonction du site du fichier texte est de. Désolé pour la gaufre, mais je serais reconnaissant pour les pointeurs sur ce qui pourrait être préférable de faire.
Merci beaucoup à l'avance. :-)
OK merci jcrossley3. Je me suis ligoté dans des nœuds en essayant de "faire OO" quand il semble que je ne serai pas capable de réutiliser une grande partie du code et si je le fais comme je l'étais alors je finirai par avoir des milliers de les classes me confondent plus. Je vais essayer de réutiliser le code là où je peux, mais à part ça je peux avoir une classe Parser par site contrôlant la lecture et l'analyse du fichier texte et produisant l'objet bean GameState java. À votre santé. – Joe
Pour ne pas paraître trop moralisateur, mais rappelez-vous toujours que OO est un "moyen", pas une "fin". OO est un excellent outil, mais comme une tronçonneuse, il est capable de destruction énorme. La partie la plus difficile de OO est de déterminer la granularité optimale de vos abstractions. Bien sûr, il est possible de faire abstraction de chaque nom de votre modèle de domaine dans une classe, mais cela ne fera que créer de la confusion chez les personnes qui doivent maintenir votre code. En fait, c'est une bonne règle de base: ajoutez seulement une abstraction (classe) quand vous pensez que cela aidera le mec qui vient derrière vous à créer votre design. :) – jcrossley3
Aussi, la réutilisation à mon humble avis n'est pas le meilleur argument de vente d'OO. Réutiliser est sacrément difficile à obtenir, et OO seul ne vous y mènera pas. Le meilleur argument de vente d'OO est la clarté, vous permettant de mieux exprimer votre intention d'une manière que les ordinateurs et, plus important encore, les humains peuvent comprendre. Bonne chance! – jcrossley3