C'est une mauvaise habitude et une pratique terriblement ennuyeuse de citer Joshua Bloch sans comprendre le fondamentalisme fondamental zéro.
Je n'ai rien lu Joshua Bloch, donc soit
- c'est un terrible programmeur
- ou les gens jusqu'à présent que je trouve en le citant (Joshua est le nom d'un garçon que je présume) utilisent simplement son matériel comme scripts religieux pour justifier leurs indulgences religieuses logicielles.
Comme dans l'intégrisme biblique, toutes les lois bibliques peuvent être résumées par
- Aimez l'identité fondamentale de tout votre cœur et de tout votre esprit
- Aime ton prochain comme toi-même
et de même le fondamentalisme du génie logiciel peut être résumé par
- consacrez-vous aux principes fondamentaux de zéro avec toute votre puissance de programmation et votre esprit
- et consacrez à l'excellence de vos collègues programmeurs comme vous le feriez pour vous-même.
De plus, parmi les cercles fondamentalistes bibliques, un corollaire fort et raisonnable est établi
- D'abord aime toi. Parce que si vous ne vous aimez pas beaucoup, le concept "aimez votre prochain comme vous-même" n'a pas beaucoup de poids, car "combien vous vous aimez" est la ligne de référence au-dessus de laquelle vous aimeriez les autres.
De même, si vous ne vous respectez pas en tant que programmeur et acceptez simplement les déclarations et les prophéties de certains gourous de la programmation SANS remettre en question les principes fondamentaux, vos citations et votre confiance en Joshua Bloch (et autres) n'ont aucun sens. Et par conséquent, vous n'auriez en fait aucun respect pour vos collègues programmeurs.
Les lois fondamentales de la programmation logicielle
- la paresse est la vertu d'un bon programmeur
- vous devez rendre votre vie de programmation aussi simple, paresseuse et donc aussi efficace que possible
- vous devez rendre les conséquences et les entrailles de votre programmation aussi simples, paresseuses et donc aussi efficaces que possible pour vos voisins-programmeurs qui travaillent avec vous et ramassent vos entrailles de programmation.
Les constantes de modèle d'interface sont une mauvaise habitude ???
En vertu de quelles lois de programmation fondamentalement efficace et responsable tombe cet édit religieux?
Lisez simplement l'article de wikipedia sur les constantes de modèle d'interface ( https://en.wikipedia.org/wiki/Constant_interface ), et les excuses idiotes qu'il énonce contre les constantes de modèle d'interface.
Whatif-No IDE? Qui sur terre en tant que programmeur logiciel n'utiliserait pas un IDE? La plupart d'entre nous sont des programmeurs qui préfèrent ne pas avoir à prouver leur survie au machisme aescétique en évitant l'utilisation d'un IDE.
- Aussi - attendez un deuxième partisan de la programmation micro-fonctionnelle pour ne pas avoir besoin d'un IDE. Attendez d'avoir lu mon explication sur la normalisation du modèle de données.
Pollue l'espace de noms avec des variables non utilisées dans la portée actuelle? Il pourrait être partisan de cette opinion
- ne sont pas conscients de la normalisation du modèle de données et de la nécessité
L'utilisation d'interfaces pour appliquer des constantes est un abus d'interfaces. Ses partisans ont la mauvaise habitude de
- ne pas voir que les "constantes" doivent être traitées comme des contrats. Et les interfaces sont utilisées pour appliquer ou projeter la conformité à un contrat.
Il est difficile, voire impossible, de convertir des interfaces en classes implémentées à l'avenir. Hah .... hmmm ... ???
- Pourquoi voudriez-vous vous engager dans un modèle de programmation comme votre subsistance persistante? IOW, pourquoi vous consacrer à une telle habitude de programmation AMBIVALENTE et mauvaise?
Quelles que soient les excuses, il n’existe AUCUNE EXCUSE VALABLE en matière de génie logiciel FONDAMENTALEMENT EFFICACE pour délégitimer ou décourager généralement l’utilisation de constantes d’interface.
Peu importe les intentions et les états mentaux d'origine des pères fondateurs qui ont élaboré la Constitution des États-Unis. Nous pourrions débattre des intentions originales des pères fondateurs, mais tout ce qui m'importe, ce sont les déclarations écrites de la Constitution américaine. Et il est de la responsabilité de chaque citoyen américain d'exploiter l'intégrisme littéraire écrit, et non les intentions fondatrices non écrites, de la Constitution américaine.
De même, je me fiche de ce que les intentions "originales" des fondateurs de la plate-forme Java et du langage de programmation avaient pour l'interface. Ce qui m'importe, ce sont les fonctionnalités efficaces fournies par la spécification Java, et j'ai l'intention d'exploiter ces fonctionnalités au maximum pour m'aider à respecter les lois fondamentales de la programmation logicielle responsable. Peu m'importe si je suis perçu comme "violant l'intention des interfaces". Peu m'importe ce que Gosling ou quelqu'un Bloch dit à propos de la "bonne façon d'utiliser Java", à moins que ce qu'ils disent ne viole pas mon besoin de fondamentaux épanouissants et EFFICACES.
L'essentiel est la normalisation du modèle de données
Peu importe comment votre modèle de données est hébergé ou transmis. Que vous utilisiez des interfaces ou des énumérations ou des whatevernots, relationnels ou sans SQL, si vous ne comprenez pas le besoin et le processus de normalisation du modèle de données.
Nous devons d'abord définir et normaliser le modèle de données d'un ensemble de processus. Et lorsque nous avons un modèle de données cohérent, SEULEMENT alors nous pouvons utiliser le flux de processus de ses composants pour définir le comportement fonctionnel et le processus bloque un champ ou un domaine d'applications. Et c'est seulement alors que nous pourrons définir l'API de chaque processus fonctionnel.
Même les facettes de la normalisation des données telles que proposées par EF Codd sont maintenant sérieusement mises à l'épreuve et sévèrement mises à l'épreuve. Par exemple, sa déclaration sur 1NF a été critiquée comme ambiguë, mal alignée et trop simplifiée, tout comme le reste de ses déclarations, en particulier avec l'avènement des services de données modernes, des technologies de prise en charge et de la transmission. OMI, les déclarations EF Codd devraient être complètement abandonnées et un nouvel ensemble de déclarations plus plausibles mathématiquement devrait être conçu.
Une faille flagrante d'EF Codd et la cause de son mauvais alignement sur une compréhension humaine efficace est sa conviction que les données multidimensionnelles et mutables perceptibles humainement peuvent être efficacement perçues à travers un ensemble de mappages bidimensionnels fragmentaires.
Les fondements de la normalisation des données
Ce qu'EF Codd n'a pas exprimé.
Au sein de chaque modèle de données cohérent, il s'agit de l'ordre séquentiel gradué de cohérence du modèle de données à atteindre.
- L'unité et l'identité des instances de données.
- concevoir la granularité de chaque composant de données, leur granularité étant à un niveau où chaque instance d'un composant peut être identifiée et récupérée de manière unique.
- absence d'aliasing d'instance. c'est-à-dire qu'il n'existe aucun moyen par lequel une identification produit plus d'une instance d'un composant.
- Absence de diaphonie d'instance. Il n'existe pas la nécessité d'utiliser une ou plusieurs autres instances d'un composant pour contribuer à l'identification d'une instance d'un composant.
- L'unité et l'identité des composants / dimensions des données.
- Présence de détournement de composants. Il doit exister une définition permettant d'identifier un composant / une dimension de manière unique. Quelle est la définition principale d'un composant;
- où la définition principale n'entraînera pas l'exposition de sous-dimensions ou de composants membres qui ne font pas partie d'un composant prévu;
- Moyen unique de désaliasage des composants. Il doit exister une et une seule définition de suppression d'alias pour un composant.
- Il existe une et une seule interface de définition ou contrat pour identifier un composant parent dans une relation hiérarchique de composants.
- Absence de diaphonie des composants. Il n'existe pas la nécessité d'utiliser un membre d'un autre composant pour contribuer à l'identification définitive d'un composant.
- Dans une telle relation parent-enfant, la définition d'identification d'un parent ne doit pas dépendre d'une partie de l'ensemble des composants membres d'un enfant. Un élément membre de l'identité d'un parent doit être l'identité complète de l'enfant sans recourir à la référence à tout ou partie des enfants d'un enfant.
- Préempter les apparences bimodales ou multimodales d'un modèle de données.
- Lorsqu'il existe deux définitions candidates d'un composant, c'est un signe évident qu'il existe deux modèles de données différents mélangés en un seul. Cela signifie qu'il y a incohérence au niveau du modèle de données ou au niveau du champ.
- Un domaine d'applications doit utiliser un et un seul modèle de données, de manière cohérente.
- Détecter et identifier la mutation des composants. À moins que vous n'ayez effectué une analyse statistique des composants d'énormes données, vous ne voyez probablement pas, ou ne voyez pas la nécessité de traiter, la mutation des composants.
- Un modèle de données peut voir certaines de ses composantes muter cycliquement ou progressivement.
- Le mode peut être rotation-membre ou rotation-transposition.
- La mutation de rotation des membres pourrait être un échange distinct de composants enfants entre les composants. Ou où des composants complètement nouveaux devraient être définis.
- La mutation transpositionnelle se manifesterait comme un membre dimensionnel muter en un attribut, vice versa.
- Chaque cycle de mutation doit être identifié comme un modal de données distinct.
- Mettez à jour chaque mutation. Telle que vous pouvez extraire une version précédente du modèle de données, lorsque peut-être le besoin se fait sentir de traiter une mutation de 8 ans du modèle de données.
Dans un domaine ou une grille d'applications de composants inter-services, il doit y avoir un et un seul modèle de données cohérent ou il existe un moyen pour un modèle / version de données de s'identifier.
Demandons-nous toujours si nous pourrions utiliser des constantes d'interface? Vraiment ?
Des problèmes de normalisation des données sont en jeu plus importants que cette question banale. SI vous ne résolvez pas ces problèmes, la confusion que vous pensez que les constantes d'interface provoquent n'est comparativement rien. Rien.
À partir de la normalisation du modèle de données, vous déterminez les composants en tant que variables, propriétés, constantes d'interface de contrat.
Ensuite, vous déterminez ce qui entre dans l'injection de valeur, la conservation de la configuration des propriétés, les interfaces, les chaînes finales, etc.
Si vous devez utiliser l'excuse de devoir localiser un composant plus facilement à dicter par rapport aux constantes d'interface, cela signifie que vous avez la mauvaise habitude de ne pas pratiquer la normalisation du modèle de données.
Vous souhaitez peut-être compiler le modèle de données dans une version vcs. Que vous pouvez extraire une version distinctement identifiable d'un modèle de données.
Les valeurs définies dans les interfaces sont totalement assurées d'être non modifiables. Et partageable. Pourquoi charger un ensemble de chaînes finales dans votre classe à partir d'une autre classe alors que tout ce dont vous avez besoin est cet ensemble de constantes ??
Alors pourquoi ne pas publier un contrat de modèle de données? Je veux dire si vous pouvez le gérer et le normaliser de manière cohérente, pourquoi pas? ...
public interface CustomerService {
public interface Label{
char AssignmentCharacter = ':';
public interface Address{
String Street = "Street";
String Unit= "Unit/Suite";
String Municipal = "City";
String County = "County";
String Provincial = "State";
String PostalCode = "Zip"
}
public interface Person {
public interface NameParts{
String Given = "First/Given name"
String Auxiliary = "Middle initial"
String Family = "Last name"
}
}
}
}
Maintenant, je peux référencer les libellés contractés de mes applications de manière telle que
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Cela confond le contenu du fichier jar? En tant que programmeur Java, je ne me soucie pas de la structure du pot.
Cela présente de la complexité pour les échanges d'exécution motivés par osgi? Osgi est un moyen extrêmement efficace pour permettre aux programmeurs de continuer dans leurs mauvaises habitudes. Il existe de meilleures alternatives que l'osgi.
Ou pourquoi pas ça? Il n'y a aucune fuite des constantes privées dans le contrat publié. Toutes les constantes privées doivent être regroupées dans une interface privée nommée "Constantes", car je ne veux pas avoir à rechercher de constantes et je suis trop paresseux pour taper à plusieurs reprises "chaîne finale privée".
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Peut-être même ceci:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Le seul problème avec les constantes d'interface mérite d'être pris en compte, c'est quand l'interface est implémentée.
Ce n'est pas "l'intention originale" des interfaces? Comme si je me soucierais de "l'intention originale" des pères fondateurs dans l'élaboration de la Constitution américaine, plutôt que de la façon dont la Cour suprême interpréterait les lettres écrites de la Constitution américaine ???
Après tout, je vis au pays du libre, du sauvage et de la maison des braves. Soyez courageux, libre, sauvage, utilisez l'interface. Si mes collègues programmeurs refusent d'utiliser des moyens de programmation efficaces et paresseux, suis-je obligé par la règle d'or de réduire mon efficacité de programmation pour l'aligner avec la leur? Je devrais peut-être le faire, mais ce n'est pas une situation idéale.