É um péssimo hábito e uma prática terrivelmente irritante citar Joshua Bloch sem entender o fundamentalismo básico do ponto zero.
Eu não li nada Joshua Bloch, então também
- ele é um péssimo programador
- ou as pessoas até agora que acho citá-lo (Joshua é o nome de um garoto que presumo) estão simplesmente usando seu material como scripts religiosos para justificar suas indulgências religiosas por software.
Como no fundamentalismo bíblico, todas as leis bíblicas podem ser resumidas por
- Ame a identidade fundamental com todo seu coração e toda sua mente
- Ame seu próximo como a si mesmo
e, de modo semelhante, o fundamentalismo da engenharia de software pode ser resumido em
- dedique-se aos fundamentos do ponto zero com todo o seu poder e mente de programação
- e dedique-se à excelência de seus colegas programadores como faria por si mesmo.
Além disso, entre os círculos fundamentalistas bíblicos, um corolário forte e razoável é traçado
- Primeiro AME a si mesmo. Porque se você não se ama muito, o conceito "ame o próximo como a si mesmo" não tem muito peso, pois "o quanto você se ama" é a linha de dados acima da qual você amaria os outros.
Da mesma forma, se você não se respeita como programador e apenas aceita os pronunciamentos e profecias de algum guru-nath da programação SEM questionar os fundamentos, suas citações e confiança em Joshua Bloch (e similares) não fazem sentido. E, portanto, você realmente não respeitaria seus colegas programadores.
As leis fundamentais da programação de software
- preguiça é a virtude de um bom programador
- você deve tornar sua vida de programação o mais fácil, o mais preguiçoso e, portanto, o mais eficaz possível
- você deve tornar as conseqüências e as entranhas da sua programação o mais fácil, o mais preguiçoso e, portanto, o mais eficaz possível para os seus programadores vizinhos que trabalham com você e capturam as entranhas da programação.
As constantes do padrão de interface são um mau hábito ???
Sob quais leis da programação fundamentalmente eficaz e responsável se enquadra esse edito religioso?
Basta ler o artigo da wikipedia sobre constantes de padrão de interface ( https://en.wikipedia.org/wiki/Constant_interface ), e as desculpas tolas que ele declara em relação às constantes de padrão de interface.
Whatif-No IDE? Quem diabos, como programador de software, não usaria um IDE? Muitos de nós somos programadores que preferem não ter que provar ter um sobrevivencialismo escapular masculino, evitando o uso de um IDE.
- Também - espere um segundo defensor da programação micro-funcional como um meio de não precisar de um IDE. Espere até você ler minha explicação sobre a normalização do modelo de dados.
Polui o espaço para nome com variáveis não usadas no escopo atual? Poderia ser proponente dessa opinião
- não estão cientes da necessidade de normalização do modelo de dados e
O uso de interfaces para impor constantes é um abuso de interfaces. Os proponentes de tais têm um mau hábito de
- não vendo que "constantes" devem ser tratadas como contrato. E as interfaces são usadas para impor ou projetar a conformidade com um contrato.
É difícil, senão impossível, converter interfaces em classes implementadas no futuro. Hah .... hmmm ... ???
- Por que você gostaria de se envolver em um padrão de programação como o seu modo de vida persistente? IOW, por que dedicar-se a um hábito de programação tão AMBIVALENTE e ruim?
Quaisquer que sejam as desculpas, NÃO EXISTEM VÁLIDAS VÁLIDAS no que diz respeito à engenharia de software FUNDAMENTALMENTE EFICAZ para deslegitimar ou geralmente desencorajar o uso de constantes de interface.
Não importa quais foram as intenções e estados mentais originais dos pais fundadores que criaram a Constituição dos Estados Unidos. Poderíamos debater as intenções originais dos pais fundadores, mas tudo o que me interessa são as declarações escritas da Constituição dos EUA. E é responsabilidade de todo cidadão dos EUA explorar o fundamentalismo literário escrito, não os fundamentos não escritos da Constituição dos EUA.
Da mesma forma, não me importo com o que as intenções "originais" dos fundadores da plataforma Java e da linguagem de programação tinham para a interface. O que importa são os recursos efetivos que a especificação Java fornece e pretendo explorar esses recursos ao máximo para me ajudar a cumprir as leis fundamentais da programação de software responsável. Não me importo se sou percebido como "violando a intenção de interfaces". Não me importo com o que Gosling ou alguém Bloch diz sobre a "maneira correta de usar Java", a menos que o que eles digam não viole minha necessidade de cumprir com EFICAZ os fundamentos.
O fundamental é a normalização do modelo de dados
Não importa como seu modelo de dados é hospedado ou transmitido. Se você usa interfaces ou enumerações ou qualquer que seja, relacional ou não-SQL, se não entender a necessidade e o processo de normalização do modelo de dados.
Primeiro, devemos definir e normalizar o modelo de dados de um conjunto de processos. E quando temos um modelo de dados coerente, SOMENTE então podemos usar o fluxo do processo de seus componentes para definir o comportamento funcional e o processo bloqueia um campo ou domínio de aplicativos. E somente então podemos definir a API de cada processo funcional.
Mesmo as facetas da normalização de dados, conforme proposto pelo EF Codd, agora são severamente desafiadas e severamente desafiadas. por exemplo, sua declaração sobre a 1NF foi criticada por ser ambígua, desalinhada e simplificada demais, assim como o restante de suas declarações, especialmente no advento dos modernos serviços de dados, re-tecnologia e transmissão. Na IMO, as instruções EF Codd devem ser completamente descartadas e um novo conjunto de instruções matematicamente plausíveis deve ser projetado.
Uma falha evidente dos EF Codd e a causa de seu desalinhamento da compreensão humana eficaz é sua crença de que dados multidimensionais e de dimensões mutáveis humanamente perceptíveis podem ser eficientemente percebidos através de um conjunto de mapeamentos bidimensionais fragmentados.
Os fundamentos da normalização de dados
O que a EF Codd não conseguiu expressar.
Dentro de cada modelo de dados coerente, estas são a ordem graduada sequencial de coerência do modelo de dados a ser atingida.
- A unidade e identidade das instâncias de dados.
- projetar a granularidade de cada componente de dados, em que sua granularidade esteja em um nível em que cada instância de um componente possa ser identificada e recuperada exclusivamente.
- ausência de alias de instância. isto é, não existem meios pelos quais uma identificação produza mais de uma instância de um componente.
- Ausência de ocorrência de diafonia. Não existe a necessidade de usar uma ou mais outras instâncias de um componente para contribuir para identificar uma instância de um componente.
- A unidade e identidade dos componentes / dimensões dos dados.
- Presença de desalinhamento de componente. Deve haver uma definição na qual um componente / dimensão possa ser identificado exclusivamente. Qual é a definição principal de um componente;
- onde a definição principal não resultará na exposição de subdimensões ou componentes de membros que não fazem parte de um componente pretendido;
- Meios exclusivos de distribuição de componentes. Deve existir uma, e apenas uma, definição de dessalinização de componente para um componente.
- Existe uma, e apenas uma, interface ou contrato de definição para identificar um componente pai em um relacionamento hierárquico de componentes.
- Ausência de diafonia de componente. Não existe a necessidade de usar um membro de outro componente para contribuir para a identificação definitiva de um componente.
- Nesse relacionamento pai-filho, a definição de identificação de um pai não deve depender de parte do conjunto de componentes de membros de um filho. Um componente membro da identidade de um pai deve ser a identidade completa do filho, sem recorrer à referência a um ou a todos os filhos de um filho.
- Prevenir aparências bi-modais ou multimodais de um modelo de dados.
- Quando existem duas definições candidatas de um componente, é um sinal óbvio que existem dois modelos de dados diferentes sendo misturados como um. Isso significa que há incoerência no nível do modelo de dados ou no campo.
- Um campo de aplicativos deve usar um e apenas um modelo de dados, de forma coerente.
- Detecte e identifique a mutação de componentes. A menos que você tenha realizado uma análise estatística de componentes de grandes dados, provavelmente você não vê ou vê a necessidade de tratar a mutação de componentes.
- Um modelo de dados pode ter seus componentes alternados ciclicamente ou gradualmente.
- O modo pode ser rotação de membro ou rotação de transposição.
- A mutação de rotação de membros pode ser uma troca distinta de componentes filhos entre componentes. Ou onde componentes completamente novos precisariam ser definidos.
- A mutação transicional se manifestaria como um membro dimensional se transformando em um atributo, vice-versa.
- Cada ciclo de mutação deve ser identificado como um modal de dados distinto.
- Versionize cada mutação. De modo que você pode obter uma versão anterior do modelo de dados, quando talvez surgir a necessidade de tratar uma mutação de 8 anos do modelo de dados.
Em um campo ou grade de aplicativos de componentes entre serviços, deve haver um e apenas um modelo de dados coerente ou existe um meio para um modelo / versão de dados se identificar.
Ainda estamos perguntando se poderíamos usar constantes de interface? Realmente ?
Há questões de normalização de dados em jogo mais conseqüentes do que essa questão mundana. Se você não resolver esses problemas, a confusão que você acha que as constantes da interface causam é comparativamente nada. Zilch.
A partir da normalização do modelo de dados, você determina os componentes como variáveis, como propriedades, como constantes da interface do contrato.
Em seguida, você determina o que entra em injeção de valor, espaço reservado na configuração da propriedade, interfaces, cadeias finais, etc.
Se você precisar usar a desculpa de precisar localizar um componente mais fácil de determinar em relação às constantes da interface, isso significa que você tem o mau hábito de não praticar a normalização do modelo de dados.
Talvez você queira compilar o modelo de dados em um release do vcs. Que você pode obter uma versão distintamente identificável de um modelo de dados.
Os valores definidos nas interfaces são completamente garantidos como não mutáveis. E compartilhável. Por que carregar um conjunto de seqüências finais em sua classe a partir de outra classe quando tudo que você precisa é esse conjunto de constantes?
Então, por que não publicar um contrato de modelo de dados? Quero dizer, se você pode gerenciar e normalizá-lo de forma coerente, por que não? ...
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"
}
}
}
}
Agora posso referenciar os rótulos contratados dos meus aplicativos de uma maneira como
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Isso confunde o conteúdo do arquivo jar? Como programador Java, não me importo com a estrutura do jar.
Isso apresenta complexidade à troca de tempo de execução motivada por osgi? Osgi é um meio extremamente eficiente para permitir que os programadores continuem com seus maus hábitos. Existem alternativas melhores que osgi.
Ou por que não isso? Não há vazamento das constantes privadas no contrato publicado. Todas as constantes privadas devem ser agrupadas em uma interface privada chamada "Constantes", porque não quero procurar constantes e tenho preguiça de digitar repetidamente "private final String".
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Talvez até isso:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
O único problema com as constantes da interface que vale a pena considerar é quando a interface é implementada.
Esta não é a "intenção original" das interfaces? Como se eu me importasse com a "intenção original" dos pais fundadores na elaboração da Constituição dos EUA, e não como a Suprema Corte interpretaria as cartas escritas da Constituição dos EUA ???
Afinal, moro na terra dos livres, da natureza e do lar dos bravos. Seja corajoso, livre, seja selvagem - use a interface. Se meus colegas programadores se recusarem a usar meios de programação eficientes e preguiçosos, sou obrigado pela regra de ouro a diminuir minha eficiência de programação para se alinhar à deles? Talvez eu deva, mas essa não é uma situação ideal.