Une énumération n'est pas un singleton btw. Un singleton est un modèle de conception de logiciel spécifique dont les enum ne sont pas traditionnellement considérés comme tels. Votre utilisation de l'Enum est étrange, c'est le moins qu'on puisse dire. Si vous souhaitez utiliser un ENUM pour se référer à des colonnes spécifiques que vous pouvez simplement effectuer les opérations suivantes:
public enum Column {
public int index;
A(0), B(1), C(2), D(3);
public Column(int index) {
this.index = index;
}
}
Ensuite, vous dites simplement:
String columnAValue = csv[row][Column.A.index]
Faire de cette façon vous permet également de parcourir l'ensemble des les colonnes comme ceci:
for(Column column : Column.values) {
String column = csv[row][column.index];
}
vous ne seriez pas en mesure de le faire en utilisant le modèle que vous avez utilisé ce qui rend l'utilisation du Enum pas la peine.Si vous allez continuer à faire ce que vous faisiez simplement les rendre constantes régulières en haut du fichier:
public class CsvParser {
public static final int COLUMN_A = 0;
public static final int COLUMN_B = 1;
public static final int COLUMN_C = 2;
}
Il n'y a pas de différence entre cela et l'approche ENUM que vous avez utilisé, sauf qu'il est plus direct et doesn n'implique pas de définir encore une autre énumération.
Maintenant à votre question. Est-ce le meilleur modèle à suivre? Eh bien comme toutes les questions de type d'architecture cela dépend. Vous construisez un programme qui doit effectuer une validation spécifique sur chaque colonne du CSV? Peut-être que la colonne A est un entier et doit être utilisée comme un entier, et la colonne B est une chaîne, et la colonne C est un Enum, etc. Ou, vous devez attacher une logique spécifique à chaque colonne alors oui ce modèle a du sens si le format de vos données est toujours prévisible. Si vous devez prendre en charge plusieurs formats de données, mais qu'ils sont corrigés (c'est-à-dire uniquement format1, format2, format3), vous pouvez continuer à suivre ce modèle. Cependant, si vous devez lire n'importe quel type de format csv, mais attacher une certaine quantité d'analyse et/ou de logique, alors vous devrez lire des métadonnées sur votre csv pour savoir quelles colonnes sont des nombres, sont des chaînes, etc. Et votre logique pourrait être attachée en regardant les métadonnées. Bien sûr, cela est plus flexible, mais la définition des métadonnées et la lecture de celles-ci et leur traitement sont non-triviales. Si vous n'avez pas besoin de ce modèle, ne le faites pas. L'autre modèle est beaucoup moins de travail et tout aussi robuste.
Si vous regardez cela à partir de la grande image. Dans la première architecture, nous avons des métadonnées. C'est l'Enum ou les constantes que nous avons créées dans le programme. Ainsi, les métadonnées sont intégrées dans le programme. Dans le deuxième style, nous avons déplacé les métadonnées du programme vers une représentation externe afin qu'elles ne soient pas intégrées au programme. L'utilisateur peut modifier les métadonnées au moment de l'exécution, où les métadonnées ne peuvent pas être modifiées dans la première version.
+1 Question Excellent, Je cherche aussi une bonne façon de le faire. – Robin