Es ist eine schlechte Angewohnheit und eine schrecklich ärgerliche Praxis , Joshua Bloch zu zitieren, ohne den grundlegenden Ground-Zero-Fundamentalismus zu verstehen.
Ich habe auch nichts von Joshua Bloch gelesen
- Er ist ein schrecklicher Programmierer
- oder die Leute, die ihn bisher zitieren (Joshua ist der Name eines Jungen, den ich vermute), verwenden sein Material einfach als religiöse Skripte, um ihre Software-religiösen Ablässe zu rechtfertigen.
Wie im biblischen Fundamentalismus können alle biblischen Gesetze durch zusammengefasst werden
- Liebe die fundamentale Identität von ganzem Herzen und von ganzem Verstand
- Liebe deinen Nächsten wie dich
In ähnlicher Weise kann der Fundamentalismus der Softwareentwicklung durch zusammengefasst werden
- widmen Sie sich mit all Ihrer Programmierkraft und Ihrem Verstand den Ground-Zero-Grundlagen
- und widmen Sie sich der Exzellenz Ihrer Programmierkollegen, wie Sie es für sich selbst tun würden.
Auch unter biblisch-fundamentalistischen Kreisen wird eine starke und vernünftige Folgerung gezogen
- Liebe dich zuerst. Denn wenn Sie sich nicht sehr lieben, hat das Konzept "Lieben Sie Ihren Nächsten wie sich selbst" nicht viel Gewicht, da "Wie sehr Sie sich selbst lieben" die Bezugslinie ist, über der Sie andere lieben würden.
Wenn Sie sich als Programmierer nicht respektieren und nur die Aussagen und Prophezeiungen eines Programmier-Guru-nath akzeptieren, ohne die Grundlagen in Frage zu stellen, sind Ihre Zitate und Ihr Vertrauen in Joshua Bloch (und dergleichen) bedeutungslos. Und deshalb hätten Sie eigentlich keinen Respekt vor Ihren Programmierkollegen.
Die Grundgesetze der Softwareprogrammierung
- Faulheit ist die Tugend eines guten Programmierers
- Sie sollen Ihr Programmierleben so einfach, faul und damit so effektiv wie möglich gestalten
- Sie sollen die Konsequenzen und Eingeweide Ihrer Programmierung für Ihre Nachbarprogrammierer, die mit Ihnen zusammenarbeiten und Ihre Programmier-Eingeweide aufgreifen, so einfach, faul und daher so effektiv wie möglich gestalten.
Schnittstellenmusterkonstanten sind eine schlechte Angewohnheit ???
Unter welche Gesetze der grundlegend wirksamen und verantwortungsvollen Programmierung fällt dieses religiöse Edikt?
Lesen Sie einfach den Wikipedia-Artikel über Schnittstellenmusterkonstanten ( https://en.wikipedia.org/wiki/Constant_interface ) und die dummen Ausreden gegen Schnittstellenmusterkonstanten.
Whatif-No IDE? Wer um alles in der Welt würde als Softwareprogrammierer keine IDE verwenden? Die meisten von uns sind Programmierer, die es vorziehen, nicht beweisen zu müssen, dass sie einen macho-aescetischen Überlebenskampf haben, indem sie die Verwendung einer IDE vermeiden.
- Warten Sie auch einen zweiten Befürworter der mikrofunktionalen Programmierung ab, um keine IDE zu benötigen. Warten Sie, bis Sie meine Erklärung zur Normalisierung des Datenmodells gelesen haben.
Verschmutzt den Namespace mit Variablen, die im aktuellen Bereich nicht verwendet werden? Es könnten Befürworter dieser Meinung sein
- sind sich der Normalisierung des Datenmodells nicht bewusst und sind nicht erforderlich
Die Verwendung von Schnittstellen zum Erzwingen von Konstanten ist ein Missbrauch von Schnittstellen. Befürworter solcher haben eine schlechte Angewohnheit von
- nicht zu sehen, dass "Konstanten" als Vertrag behandelt werden müssen. Und Schnittstellen werden verwendet, um die Einhaltung eines Vertrags durchzusetzen oder zu projizieren.
Es ist schwierig, wenn nicht unmöglich, Schnittstellen in Zukunft in implementierte Klassen umzuwandeln. Hah .... hmmm ... ???
- Warum sollten Sie sich auf ein Programmiermuster wie Ihren dauerhaften Lebensunterhalt einlassen wollen? IOW, warum widmen Sie sich solch einer AMBIVALENTEN und schlechten Programmiergewohnheit?
Was auch immer die Ausreden sein mögen, es gibt KEINE GÜLTIGE Entschuldigung, wenn es darum geht, die Verwendung von Schnittstellenkonstanten zu delegitimieren oder generell zu entmutigen.
Es spielt keine Rolle, wie die ursprünglichen Absichten und mentalen Zustände der Gründerväter waren, die die Verfassung der Vereinigten Staaten ausgearbeitet haben. Wir könnten die ursprünglichen Absichten der Gründerväter diskutieren, aber alles, was mich interessiert, sind die schriftlichen Erklärungen der US-Verfassung. Und es liegt in der Verantwortung jedes US-Bürgers, den schriftlichen literarischen Fundamentalismus und nicht die ungeschriebenen Gründungsabsichten der US-Verfassung auszunutzen.
Ebenso ist es mir egal, was die "ursprünglichen" Absichten der Gründer der Java-Plattform und der Programmiersprache für die Schnittstelle hatten. Was mich interessiert, sind die effektiven Funktionen, die die Java-Spezifikation bietet, und ich beabsichtige, diese Funktionen in vollem Umfang zu nutzen, um die grundlegenden Gesetze einer verantwortungsvollen Softwareprogrammierung zu erfüllen. Es ist mir egal, ob ich als "Verstoß gegen die Absicht für Schnittstellen" wahrgenommen werde. Es ist mir egal, was Gosling oder jemand Bloch über die "richtige Art und Weise, Java zu verwenden" sagt, es sei denn, was sie sagen, verstößt nicht gegen mein Bedürfnis nach EFFEKTIVEN Grundlagen.
Das Fundament ist die Normalisierung von Datenmodellen
Es spielt keine Rolle, wie Ihr Datenmodell gehostet oder übertragen wird. Unabhängig davon, ob Sie Schnittstellen oder Aufzählungen oder Whatevernots verwenden, relational oder ohne SQL, wenn Sie die Notwendigkeit und den Prozess der Normalisierung von Datenmodellen nicht verstehen.
Wir müssen zuerst das Datenmodell einer Reihe von Prozessen definieren und normalisieren. Und wenn wir ein kohärentes Datenmodell haben, können wir NUR dann den Prozessfluss seiner Komponenten verwenden, um das Funktionsverhalten zu definieren und einen Bereich oder einen Bereich von Anwendungen zu blockieren. Und nur dann können wir die API jedes Funktionsprozesses definieren.
Sogar die von EF Codd vorgeschlagenen Facetten der Datennormalisierung sind jetzt stark in Frage gestellt und in Frage gestellt. zB wurde seine Aussage zu 1NF als mehrdeutig, falsch ausgerichtet und zu stark vereinfacht kritisiert, ebenso wie der Rest seiner Aussagen, insbesondere zum Aufkommen moderner Datendienste, Repo-Technologie und Übertragung. IMO sollten die EF Codd-Anweisungen vollständig verworfen und neue mathematisch plausibelere Anweisungen entworfen werden.
Ein eklatanter Fehler von EF Codd und die Ursache für seine Fehlausrichtung auf ein effektives menschliches Verständnis ist seine Überzeugung, dass vom Menschen wahrnehmbare mehrdimensionale Daten mit veränderlichen Dimensionen durch eine Reihe von stückweisen zweidimensionalen Abbildungen effizient wahrgenommen werden können.
Die Grundlagen der Datennormalisierung
Was EF Codd nicht ausdrücken konnte.
Innerhalb jedes kohärenten Datenmodells ist dies die sequentielle abgestufte Reihenfolge der zu erreichenden Datenmodellkohärenz.
- Die Einheit und Identität von Dateninstanzen.
- Entwerfen Sie die Granularität jeder Datenkomponente, wobei ihre Granularität auf einer Ebene liegt, auf der jede Instanz einer Komponente eindeutig identifiziert und abgerufen werden kann.
- Fehlen eines Instanz-Aliasing. dh es gibt keine Mittel, mit denen eine Identifikation mehr als eine Instanz einer Komponente erzeugt.
- Fehlen eines Instanz-Übersprechens. Es besteht nicht die Notwendigkeit, eine oder mehrere andere Instanzen einer Komponente zu verwenden, um zur Identifizierung einer Instanz einer Komponente beizutragen.
- Die Einheit und Identität von Datenkomponenten / -dimensionen.
- Vorhandensein von Komponenten-De-Aliasing. Es muss eine Definition existieren, mit der eine Komponente / Dimension eindeutig identifiziert werden kann. Welches ist die primäre Definition einer Komponente;
- wenn die primäre Definition nicht dazu führt, dass Unterdimensionen oder Elementkomponenten verfügbar gemacht werden, die nicht Teil einer beabsichtigten Komponente sind;
- Einzigartige Mittel zum Dealiasing von Komponenten. Es muss eine und nur eine solche De-Aliasing-Definition für eine Komponente geben.
- Es gibt eine und nur eine Definitionsschnittstelle oder einen Vertrag, um eine übergeordnete Komponente in einer hierarchischen Beziehung von Komponenten zu identifizieren.
- Kein Übersprechen der Komponenten. Es besteht nicht die Notwendigkeit, ein Mitglied einer anderen Komponente zu verwenden, um zur endgültigen Identifizierung einer Komponente beizutragen.
- In einer solchen Eltern-Kind-Beziehung darf die identifizierende Definition eines Elternteils nicht von einem Teil der Gruppe von Mitgliedskomponenten eines Kindes abhängen. Eine Mitgliedskomponente der Identität eines Elternteils muss die vollständige Kinderidentität sein, ohne auf einige oder alle Kinder eines Kindes zu verweisen.
- Vermeiden Sie bimodale oder multimodale Erscheinungen eines Datenmodells.
- Wenn zwei Kandidatendefinitionen einer Komponente vorhanden sind, ist dies ein offensichtliches Zeichen dafür, dass zwei verschiedene Datenmodelle als eines verwechselt werden. Das heißt, es gibt Inkohärenz auf Datenmodellebene oder auf Feldebene.
- Ein Anwendungsbereich muss kohärent ein und nur ein Datenmodell verwenden.
- Komponentenmutation erkennen und identifizieren. Wenn Sie keine statistische Komponentenanalyse großer Datenmengen durchgeführt haben, sehen Sie wahrscheinlich keine Komponentenmutation oder sehen die Notwendigkeit, diese zu behandeln.
- Bei einem Datenmodell können einige seiner Komponenten zyklisch oder allmählich mutieren.
- Der Modus kann Elementdrehung oder Transpositionsdrehung sein.
- Eine Mutation der Mitgliederrotation könnte ein deutlicher Austausch von untergeordneten Komponenten zwischen Komponenten sein. Oder wo völlig neue Komponenten definiert werden müssten.
- Eine transpositionelle Mutation würde sich als ein Dimensionselement manifestieren, das zu einem Attribut mutiert, und umgekehrt.
- Jeder Mutationszyklus muss als eigenständiges Datenmodal identifiziert werden.
- Versioniere jede Mutation. So können Sie eine frühere Version des Datenmodells herausziehen, wenn möglicherweise die Notwendigkeit besteht, eine 8 Jahre alte Mutation des Datenmodells zu behandeln.
In einem Bereich oder Raster von Komponentenanwendungen zwischen Serviceleistungen muss es nur ein einziges kohärentes Datenmodell geben oder es gibt ein Mittel, mit dem sich ein Datenmodell / eine Version identifizieren kann.
Fragen wir uns immer noch, ob wir Schnittstellenkonstanten verwenden könnten? Ja wirklich ?
Es geht um Probleme bei der Datennormalisierung, die konsequenter sind als diese weltliche Frage. Wenn Sie diese Probleme nicht lösen, ist die Verwirrung, die Schnittstellenkonstanten Ihrer Meinung nach verursachen, vergleichsweise gering. Zilch.
Aus der Normalisierung des Datenmodells bestimmen Sie dann die Komponenten als Variablen, als Eigenschaften, als Vertragsschnittstellenkonstanten.
Anschließend bestimmen Sie, welche Werte in die Wertinjektion, die Platzhalterung für die Eigenschaftskonfiguration, die Schnittstellen, die endgültigen Zeichenfolgen usw. fließen.
Wenn Sie die Ausrede verwenden müssen, eine Komponente zu finden, die leichter anhand von Schnittstellenkonstanten zu diktieren ist, bedeutet dies, dass Sie die schlechte Angewohnheit haben, die Normalisierung von Datenmodellen nicht zu üben.
Vielleicht möchten Sie das Datenmodell in eine vcs-Version kompilieren. Dass Sie eine eindeutig identifizierbare Version eines Datenmodells herausziehen können.
In Schnittstellen definierte Werte sind vollständig unveränderlich. Und teilbar. Warum sollten Sie eine Reihe von endgültigen Zeichenfolgen aus einer anderen Klasse in Ihre Klasse laden, wenn Sie nur diese Konstanten benötigen?
Warum also nicht einen Datenmodellvertrag veröffentlichen? Ich meine, wenn Sie es kohärent verwalten und normalisieren können, warum nicht? ...
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"
}
}
}
}
Jetzt kann ich auf die vertraglich vereinbarten Etiketten meiner Apps wie folgt verweisen
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Dies verwirrt den Inhalt der JAR-Datei? Als Java-Programmierer interessiert mich die Struktur des Jars nicht.
Dies stellt die Komplexität des osgi-motivierten Laufzeitaustauschs dar. Osgi ist ein äußerst effizientes Mittel, um Programmierern zu ermöglichen, ihre schlechten Gewohnheiten fortzusetzen. Es gibt bessere Alternativen als Osgi.
Oder warum nicht das? Es gibt kein Durchsickern der privaten Konstanten in den veröffentlichten Vertrag. Alle privaten Konstanten sollten in einer privaten Schnittstelle mit dem Namen "Konstanten" gruppiert werden, da ich nicht nach Konstanten suchen muss und zu faul bin, um wiederholt "private final String" einzugeben.
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Vielleicht sogar das:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Das einzige Problem mit Schnittstellenkonstanten, das berücksichtigt werden sollte, ist die Implementierung der Schnittstelle.
Dies ist nicht die "ursprüngliche Absicht" von Schnittstellen? Als würde mir die "ursprüngliche Absicht" der Gründerväter bei der Ausarbeitung der US-Verfassung am Herzen liegen, anstatt wie der Oberste Gerichtshof die schriftlichen Briefe der US-Verfassung interpretieren würde ???
Immerhin lebe ich im Land der Freien, der Wildnis und der Heimat der Tapferen. Sei mutig, sei frei, sei wild - benutze die Schnittstelle. Wenn meine Programmierkollegen sich weigern, effiziente und faule Programmiermittel zu verwenden, bin ich dann nach der goldenen Regel verpflichtet, meine Programmiereffizienz zu verringern, um sie an ihre anzupassen? Vielleicht sollte ich, aber das ist keine ideale Situation.