È cattiva abitudine e terribile pratica fastidiosa citare Joshua Bloch senza capire il fondamentalismo fondamentale zero.
Nemmeno io ho letto nulla di Joshua Bloch
- è un programmatore terribile
- o le persone finora che trovo citandolo (Joshua è il nome di un ragazzo presumo) stanno semplicemente usando il suo materiale come script religiosi per giustificare le loro indulgenze religiose sul software.
Come nel fondamentalismo biblico si possono riassumere tutte le leggi bibliche
- Ama l'identità fondamentale con tutto il tuo cuore e tutta la tua mente
- Ama il tuo prossimo come te stesso
e così allo stesso modo il fondamentalismo dell'ingegneria del software può essere riassunto da
- dedicarti ai fondamentali zero-terra con tutta la tua potenza e la tua mente di programmazione
- e dedica all'eccellenza dei tuoi colleghi programmatori come faresti per te stesso.
Inoltre, tra i circoli fondamentalisti biblici viene disegnato un corollario forte e ragionevole
- Prima Ama te stesso. Perché se non ami te stesso molto, allora il concetto di "ama il tuo prossimo come te stesso" non ha molto peso, poiché "quanto ami te stesso" è la linea di riferimento sopra la quale ameresti gli altri.
Allo stesso modo, se non ti rispetti come programmatore e accetti semplicemente le dichiarazioni e le profezie di alcuni guru-nath programmatori SENZA mettere in discussione i fondamenti, le tue citazioni e l'affidamento a Joshua Bloch (e simili) non ha senso. E quindi, in realtà non avresti rispetto per i tuoi colleghi programmatori.
Le leggi fondamentali della programmazione software
- la pigrizia è la virtù di un buon programmatore
- devi rendere la tua vita di programmazione più semplice, pigra e quindi il più efficace possibile
- devi rendere le conseguenze e le viscere della tua programmazione il più semplice, il più pigro e quindi il più efficace possibile per i tuoi programmatori vicini che lavorano con te e raccolgono le tue viscere di programmazione.
Le costanti del modello di interfaccia sono una cattiva abitudine ???
In quali leggi della programmazione fondamentalmente efficace e responsabile rientra questo editto religioso?
Basta leggere l'articolo di Wikipedia sulle costanti del modello di interfaccia ( https://en.wikipedia.org/wiki/Constant_interface ), e le sciocche scuse che afferma contro le costanti del modello di interfaccia.
Whatif-No IDE? Chi mai come programmatore software non userebbe un IDE? Molti di noi sono programmatori che preferiscono non dover dimostrare di avere un realismo macho aescetico evitando l'uso di un IDE.
- Inoltre, attendi un secondo sostenitore della programmazione micro-funzionale come mezzo per non aver bisogno di un IDE. Aspetta di leggere la mia spiegazione sulla normalizzazione del modello di dati.
Inquina lo spazio dei nomi con variabili non utilizzate nell'ambito corrente? Potrebbero essere i sostenitori di questa opinione
- non sono a conoscenza della necessità e della necessità di normalizzare il modello di dati
L'uso delle interfacce per far rispettare le costanti è un abuso di interfacce. I sostenitori di tale hanno una cattiva abitudine di
- non vedendo che le "costanti" devono essere trattate come un contratto. E le interfacce vengono utilizzate per far rispettare o proiettare la conformità a un contratto.
È difficile se non impossibile convertire le interfacce in classi implementate in futuro. Hah .... hmmm ... ???
- Perché vorresti impegnarti in un modello di programmazione come il tuo sostentamento permanente? IOW, perché dedicarti a una tale AMBIVALENTE e cattiva abitudine di programmazione?
Qualunque siano le scuse, NON vi è alcuna SCUSA VALIDA quando si tratta di ingegneria software FONDAMENTALMENTE EFFICACE per delegittimare o in generale scoraggiare l'uso di costanti di interfaccia.
Non importa quali fossero gli intenti e gli stati mentali originali dei padri fondatori che hanno elaborato la Costituzione degli Stati Uniti. Potremmo discutere degli intenti originali dei padri fondatori, ma tutto ciò che mi interessa sono le dichiarazioni scritte della Costituzione degli Stati Uniti. Ed è responsabilità di ogni cittadino americano sfruttare il fondamentalismo letterario scritto, non gli intenti fondativi non scritti, della Costituzione degli Stati Uniti.
Allo stesso modo, non mi interessa quali fossero gli intenti "originali" dei fondatori della piattaforma Java e del linguaggio di programmazione per l'interfaccia. Quello che mi interessa sono le funzionalità efficaci fornite dalla specifica Java e intendo sfruttare al massimo quelle funzionalità per aiutarmi a soddisfare le leggi fondamentali della programmazione software responsabile. Non mi interessa se sono percepito come "violare l'intenzione di interfacce". Non mi importa cosa dice Gosling o qualcuno di Bloch del "modo corretto di usare Java", a meno che ciò che dicono non violi il mio bisogno di EFFICACE fondamenti soddisfacenti.
Fondamentale è la normalizzazione del modello di dati
Non importa come il tuo modello di dati sia ospitato o trasmesso. Se si utilizzano interfacce o enum o whatevernots, relazionali o no-SQL, se non si capisce la necessità e il processo di normalizzazione del modello di dati.
Dobbiamo innanzitutto definire e normalizzare il modello di dati di un insieme di processi. E quando abbiamo un modello di dati coerente, SOLO allora possiamo usare il flusso di processo dei suoi componenti per definire il comportamento funzionale e il processo blocca un campo o un regno di applicazioni. E solo allora possiamo definire l'API di ciascun processo funzionale.
Anche le sfaccettature della normalizzazione dei dati, come proposto da EF Codd, sono ora messe a dura prova e messe a dura prova. ad esempio, la sua affermazione su 1NF è stata criticata come ambigua, disallineata e troppo semplificata, così come il resto delle sue dichiarazioni soprattutto nell'avvento dei moderni servizi di dati, tecnologia repo e trasmissione. IMO, le dichiarazioni EF Codd dovrebbero essere completamente abbandonate e dovrebbe essere progettata una nuova serie di dichiarazioni più matematicamente plausibili.
Un evidente difetto di EF Codd e la causa del suo disallineamento per un'efficace comprensione umana è la sua convinzione che i dati multidimensionali e mutabili di dimensione umana percepibili possano essere percepiti in modo efficiente attraverso una serie di mappature bidimensionali frammentarie.
I fondamenti della normalizzazione dei dati
Cosa non ha potuto esprimere EF Codd.
All'interno di ciascun modello di dati coerente, si tratta dell'ordine sequenziale graduale di coerenza del modello di dati da raggiungere.
- Unità e identità delle istanze di dati.
- progettare la granularità di ciascun componente di dati, per cui la loro granularità è a un livello in cui ogni istanza di un componente può essere identificata e recuperata in modo univoco.
- assenza di aliasing di istanza. cioè, non esiste alcun mezzo per cui un'identificazione produce più di un'istanza di un componente.
- Assenza di diafonia di istanza. Non esiste la necessità di utilizzare una o più altre istanze di un componente per contribuire a identificare un'istanza di un componente.
- L'unità e l'identità delle componenti / dimensioni dei dati.
- Presenza di de-aliasing dei componenti. Deve esistere una definizione per cui un componente / dimensione può essere identificato in modo univoco. Qual è la definizione principale di un componente;
- laddove la definizione primaria non comporti l'esposizione di sottodimensionamenti o componenti di componenti che non fanno parte di un componente previsto;
- Mezzi unici di dealiasing dei componenti. Deve esistere una e una sola definizione di de-aliasing di un componente per un componente.
- Esiste una e una sola interfaccia di definizione o contratto per identificare un componente padre in una relazione gerarchica di componenti.
- Assenza di diafonia dei componenti. Non esiste la necessità di utilizzare un membro di un altro componente per contribuire all'identificazione definitiva di un componente.
- In tale relazione genitore-figlio, la definizione identificativa di un genitore non deve dipendere da parte dell'insieme di componenti membri di un figlio. Un componente membro dell'identità di un genitore deve essere l'identità figlio completa senza ricorrere al riferimento a uno o tutti i figli di un figlio.
- Aspetti bi-modali o multimodali preventivi di un modello di dati.
- Quando esistono due definizioni candidate di un componente, è evidente che esistono due diversi modelli di dati confusi come uno. Ciò significa che c'è incoerenza a livello di modello di dati o a livello di campo.
- Un campo di applicazioni deve utilizzare in modo coerente un solo modello di dati.
- Rileva e identifica la mutazione del componente. A meno che non sia stata eseguita un'analisi statistica dei componenti di enormi dati, probabilmente non si vede o non si vede la necessità di trattare la mutazione dei componenti.
- Un modello di dati può far mutare ciclicamente o gradualmente i suoi componenti.
- La modalità può essere rotazione membro o rotazione trasposizione.
- La mutazione a rotazione dei membri potrebbe essere lo scambio distinto di componenti figlio tra componenti. O dove dovrebbero essere definiti componenti completamente nuovi.
- La mutazione trasposizionale si manifesterebbe come un membro dimensionale che muta in un attributo, viceversa.
- Ogni ciclo di mutazione deve essere identificato come un dato modale distinto.
- Versionize ogni mutazione. Tale che è possibile estrarre una versione precedente del modello di dati, quando forse sorge la necessità di trattare una mutazione di 8 anni del modello di dati.
In un campo o in una griglia di applicazioni componenti inter-servicing, ci deve essere un solo modello di dati coerente o esiste un mezzo per un modello di dati / versione per identificarsi.
Stiamo ancora chiedendo se potremmo usare le Costanti di interfaccia? Veramente ?
Sono in gioco problemi di normalizzazione dei dati più consequenziali di questa domanda banale. Se non risolvi questi problemi, la confusione che pensi che le costanti dell'interfaccia causino non è relativamente nulla. Zilch.
Dalla normalizzazione del modello di dati quindi si determinano i componenti come variabili, come proprietà, come costanti dell'interfaccia del contratto.
Quindi si determina quale va in iniezione di valore, segnaposto di configurazione della proprietà, interfacce, stringhe finali, ecc.
Se devi usare la scusa della necessità di individuare un componente più facile da dettare contro le costanti dell'interfaccia, significa che hai la cattiva abitudine di non praticare la normalizzazione del modello di dati.
Forse desideri compilare il modello di dati in una versione di vcs. Che è possibile estrarre una versione distintamente identificabile di un modello di dati.
I valori definiti nelle interfacce sono completamente sicuri di non essere mutabili. E condivisibile. Perché caricare un set di stringhe finali nella tua classe da un'altra classe quando tutto ciò di cui hai bisogno è quel set di costanti ??
Quindi perché non pubblicare questo contratto per un modello di dati? Voglio dire se riesci a gestirlo e normalizzarlo in modo coerente, perché 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"
}
}
}
}
Ora posso fare riferimento alle etichette contratte delle mie app in un modo come
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Questo confonde il contenuto del file jar? Come programmatore Java non mi interessa la struttura del vaso.
Ciò presenta complessità allo scambio di runtime motivato da osgi? Osgi è un mezzo estremamente efficiente per consentire ai programmatori di continuare nelle loro cattive abitudini. Ci sono alternative migliori di osgi.
O perché no? Non vi è alcuna perdita di Costanti private nel contratto pubblicato. Tutte le costanti private devono essere raggruppate in un'interfaccia privata denominata "Costanti", perché non voglio cercare costanti e sono troppo pigro per digitare ripetutamente "stringa finale privata".
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Forse anche questo:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
L'unico problema con le costanti dell'interfaccia che vale la pena considerare è quando l'interfaccia è implementata.
Questa non è "l'intenzione originale" delle interfacce? Come se mi interessasse "l'intenzione originale" dei padri fondatori nell'elaborare la Costituzione degli Stati Uniti, piuttosto che il modo in cui la Corte Suprema avrebbe interpretato le lettere scritte della Costituzione degli Stati Uniti ???
Dopotutto, vivo nella terra dei liberi, dei selvaggi e dei coraggiosi. Sii coraggioso, sii libero, sii selvaggio - usa l'interfaccia. Se i miei colleghi programmatori si rifiutano di usare mezzi di programmazione efficienti e pigri, sono obbligato dalla regola d'oro a ridurre la mia efficienza di programmazione per allinearli con i loro? Forse dovrei, ma questa non è una situazione ideale.