Es MALO hábito y una práctica terriblemente molesta citar a Joshua Bloch sin comprender el fundamentalismo básico de la zona cero.
No he leído nada Joshua Bloch, así que tampoco
- el es un programador terrible
- o las personas hasta ahora a las que encuentro citando (Joshua es el nombre de un niño que presumo) simplemente están usando su material como guiones religiosos para justificar sus indulgencias religiosas de software.
Como en el fundamentalismo bíblico, todas las leyes bíblicas pueden resumirse por
- Ama la identidad fundamental con todo tu corazón y toda tu mente
- Ama a tu prójimo como a ti mismo
y de manera similar, el fundamentalismo de la ingeniería de software puede resumirse en
- Dedícate a los fundamentos de la zona cero con todo tu poder de programación y mente
- y dedícate a la excelencia de tus compañeros programadores como lo harías por ti mismo.
Además, entre los círculos fundamentalistas bíblicos se dibuja un corolario fuerte y razonable.
- Primero Amate a ti mismo. Porque si no te amas mucho, entonces el concepto "ama a tu prójimo como a ti mismo" no tiene mucho peso, ya que "cuánto te amas a ti mismo" es la línea de referencia sobre la cual amarías a los demás.
Del mismo modo, si no te respetas a ti mismo como programador y solo aceptas los pronunciamientos y las profecías de algún gurú de la programación SIN cuestionar los fundamentos, tus citas y tu confianza en Joshua Bloch (y similares) no tiene sentido. Y, por lo tanto, en realidad no respetarías a tus compañeros programadores.
Las leyes fundamentales de la programación de software.
- la pereza es la virtud de un buen programador
- debes hacer que tu vida de programación sea lo más fácil, perezosa y, por lo tanto, tan efectiva como sea posible
- debe hacer que las consecuencias y las entrañas de su programación sean tan fáciles, perezosas y, por lo tanto, tan efectivas como sea posible para sus programadores vecinos que trabajan con usted y recogen sus entrañas de programación.
¿Las constantes de patrón de interfaz son un mal hábito?
¿Bajo qué leyes de programación fundamentalmente efectiva y responsable cae este edicto religioso?
Simplemente lea el artículo de Wikipedia sobre las constantes de patrón de interfaz ( https://en.wikipedia.org/wiki/Constant_interface ), y las tontas excusas que establece contra las constantes de patrón de interfaz.
Whatif-No IDE? ¿Quién en la tierra como programador de software no usaría un IDE? La mayoría de nosotros somos programadores que preferimos no tener que demostrar que tenemos un sobrevivencia machista y estético para evitar el uso de un IDE.
- Además, espere un segundo proponentes de la programación micro-funcional como un medio para no necesitar un IDE. Espere hasta que lea mi explicación sobre la normalización del modelo de datos.
¿Contamina el espacio de nombres con variables no utilizadas dentro del alcance actual? Podrían ser defensores de esta opinión
- desconocen y necesitan la normalización del modelo de datos
El uso de interfaces para aplicar constantes es un abuso de las interfaces. Los defensores de tales tienen la mala costumbre de
- sin ver que las "constantes" deben tratarse como un contrato. Y las interfaces se utilizan para hacer cumplir o proyectar el cumplimiento de un contrato.
Es difícil, si no imposible, convertir las interfaces en clases implementadas en el futuro. Hah .... hmmm ... ???
- ¿Por qué querrías participar en un patrón de programación como tu subsistencia persistente? IOW, ¿por qué dedicarse a un hábito de programación tan AMBIVALENT y tan malo?
Cualesquiera que sean las excusas, NO HAY EXCUSA VÁLIDA cuando se trata de ingeniería de software FUNDAMENTAMENTE EFECTIVA para deslegitimar o, en general, desalentar el uso de constantes de interfaz.
No importa cuáles fueron las intenciones originales y los estados mentales de los padres fundadores que elaboraron la Constitución de los Estados Unidos. Podríamos debatir las intenciones originales de los padres fundadores, pero lo único que me importa son las declaraciones escritas de la Constitución de los Estados Unidos. Y es responsabilidad de cada ciudadano estadounidense explotar el fundamentalismo literario escrito, no las intenciones fundacionales no escritas, de la Constitución de los Estados Unidos.
Del mismo modo, no me importa lo que las intenciones "originales" de los fundadores de la plataforma Java y el lenguaje de programación tenían para la interfaz. Lo que me importa son las características efectivas que proporciona la especificación Java, y tengo la intención de explotar esas características al máximo para ayudarme a cumplir con las leyes fundamentales de la programación de software responsable. No me importa si se percibe que "viola la intención de las interfaces". No me importa lo que Gosling o alguien Bloch diga sobre la "forma correcta de usar Java", a menos que lo que digan no viole mi necesidad de cumplir con los fundamentos EFICAZmente.
Lo fundamental es la normalización del modelo de datos
No importa cómo se aloje o transmita su modelo de datos. Ya sea que use interfaces o enumeraciones o cualquier otra cosa, relacional o sin SQL, si no comprende la necesidad y el proceso de normalización del modelo de datos.
Primero debemos definir y normalizar el modelo de datos de un conjunto de procesos. Y cuando tenemos un modelo de datos coherente, SOLO podemos usar el flujo de proceso de sus componentes para definir el comportamiento funcional y el proceso bloquea un campo o ámbito de aplicaciones. Y solo entonces podemos definir la API de cada proceso funcional.
Incluso las facetas de la normalización de datos propuestas por EF Codd ahora se ven seriamente desafiadas y severamente desafiadas. Por ejemplo, su declaración sobre 1NF ha sido criticada por ser ambigua, desalineada y simplificada en exceso, al igual que el resto de sus declaraciones, especialmente en el advenimiento de los servicios de datos modernos, tecnología de transmisión y transmisión. En mi opinión, las declaraciones de EF Codd deben eliminarse por completo y diseñarse un nuevo conjunto de declaraciones más matemáticamente plausibles.
Una falla evidente de EF Codd's y la causa de su desalineación con la comprensión humana efectiva es su creencia de que los datos de dimensiones mutables y multidimensionales perceptibles humanamente pueden percibirse eficientemente a través de un conjunto de mapeos bidimensionales fragmentados.
Los fundamentos de la normalización de datos
Lo que EF Codd no pudo expresar.
Dentro de cada modelo de datos coherente, estos son el orden secuencial graduado de coherencia del modelo de datos a lograr.
- La unidad e identidad de las instancias de datos.
- diseñe la granularidad de cada componente de datos, de modo que su granularidad esté en un nivel en el que cada instancia de un componente pueda identificarse y recuperarse de manera única.
- ausencia de alias de instancia. es decir, no existen medios por los cuales una identificación produce más de una instancia de un componente.
- Ausencia de diafonía de instancia. No existe la necesidad de utilizar una o más instancias de un componente para contribuir a identificar una instancia de un componente.
- La unidad e identidad de los componentes / dimensiones de los datos.
- Presencia de alias de componentes. Debe existir una definición mediante la cual un componente / dimensión pueda identificarse de manera única. Cuál es la definición primaria de un componente;
- donde la definición primaria no resultará en exponer subdimensiones o componentes miembros que no son parte de un componente deseado;
- Medios únicos de negociación de componentes. Debe existir una, y solo una, dicha definición de eliminación de alias de componentes para un componente.
- Existe una, y solo una, interfaz de definición o contrato para identificar un componente padre en una relación jerárquica de componentes.
- Ausencia de diafonía de componentes. No existe la necesidad de utilizar un miembro de otro componente para contribuir a la identificación definitiva de un componente.
- En dicha relación padre-hijo, la definición de identificación de un padre no debe depender de parte del conjunto de componentes miembros de un hijo. Un componente miembro de la identidad de un padre debe ser la identidad completa del niño sin tener que recurrir a la referencia de uno o todos los hijos de un niño.
- Preempt apariencias bimodales o multimodales de un modelo de datos.
- Cuando existen dos definiciones candidatas de un componente, es una señal obvia de que existen dos modelos de datos diferentes que se mezclan como uno solo. Eso significa que hay incoherencia a nivel del modelo de datos, o el nivel de campo.
- Un campo de aplicaciones debe usar uno y solo un modelo de datos, de manera coherente.
- Detectar e identificar la mutación del componente. A menos que haya realizado un análisis estadístico de componentes de gran cantidad de datos, probablemente no vea, o vea la necesidad de tratar, la mutación de componentes.
- Un modelo de datos puede tener algunos de sus componentes mutados cíclica o gradualmente.
- El modo puede ser rotación de miembros o rotación de transposición.
- La mutación de rotación de miembros podría ser un intercambio distinto de componentes secundarios entre componentes. O donde se tendrían que definir componentes completamente nuevos.
- La mutación transposicional se manifestaría como un miembro dimensional que muta en un atributo, viceversa.
- Cada ciclo de mutación debe identificarse como un modo de datos distinto.
- Versionar cada mutación. De modo que pueda extraer una versión anterior del modelo de datos, cuando tal vez surja la necesidad de tratar una mutación del modelo de datos de 8 años.
En un campo o cuadrícula de aplicaciones de componentes entre servicios, debe haber un solo modelo de datos coherente o existe un medio para que un modelo / versión de datos se identifique.
¿Todavía estamos preguntando si podríamos usar las constantes de interfaz? De Verdad ?
Hay problemas de normalización de datos en juego más consecuentes que esta pregunta mundana. SI no resuelve esos problemas, la confusión que cree que causan las constantes de la interfaz es comparativamente nada. Nada.
A partir de la normalización del modelo de datos, usted determina los componentes como variables, como propiedades, como constantes de interfaz de contrato.
Luego, determina qué se aplica a la inyección de valor, la retención de la configuración de propiedad, las interfaces, las cadenas finales, etc.
Si tiene que usar la excusa de necesitar localizar un componente más fácil de dictar contra las constantes de la interfaz, significa que tiene la mala costumbre de no practicar la normalización del modelo de datos.
Quizás desee compilar el modelo de datos en una versión vcs. Que puede extraer una versión claramente identificable de un modelo de datos.
Los valores definidos en las interfaces están completamente garantizados para ser no mutables. Y compartible. ¿Por qué cargar un conjunto de cadenas finales en su clase desde otra clase cuando todo lo que necesita es ese conjunto de constantes?
Entonces, ¿por qué no esto para publicar un contrato de modelo de datos? Quiero decir, si puedes manejarlo y normalizarlo de manera coherente, ¿por qué no? ...
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"
}
}
}
}
Ahora puedo hacer referencia a las etiquetas contratadas de mis aplicaciones de una manera como
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Esto confunde el contenido del archivo jar? Como programador de Java, no me importa la estructura del jar.
¿Esto presenta complejidad al intercambio de tiempo de ejecución motivado por osgi? Osgi es un medio extremadamente eficiente para permitir que los programadores continúen con sus malos hábitos. Hay mejores alternativas que osgi.
¿O por qué no esto? No hay fugas de las constantes privadas en el contrato publicado. Todas las constantes privadas deben agruparse en una interfaz privada llamada "Constantes", porque no quiero tener que buscar constantes y soy demasiado vago para escribir repetidamente "Cadena final privada".
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Quizás incluso esto:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
El único problema con las constantes de la interfaz que vale la pena considerar es cuando se implementa la interfaz.
¿Esta no es la "intención original" de las interfaces? Como si me importara la "intención original" de los padres fundadores en la elaboración de la Constitución de los Estados Unidos, en lugar de cómo la Corte Suprema interpretaría las cartas escritas de la Constitución de los Estados Unidos.
Después de todo, vivo en la tierra de los libres, los salvajes y el hogar de los valientes. Sé valiente, sé libre, sé salvaje: utiliza la interfaz. Si mis compañeros programadores se niegan a usar medios de programación eficientes y perezosos, ¿estoy obligado por la regla de oro a disminuir mi eficiencia de programación para alinearme con la de ellos? Tal vez debería, pero esa no es una situación ideal.