Cytowanie Joshua Blocha bez zrozumienia podstawowego fundamentalnego zerowego fundamentu jest ZŁYM przyzwyczajeniem i strasznie NIESAMOWITEJ praktyką .
Nic też nie czytałem Joshua Bloch, więc też
- on jest okropnym programistą
- lub ludzie, których do tej pory go cytuję (Joshua to imię chłopca, który, jak przypuszczam), po prostu wykorzystują jego materiał jako religijne skrypty, aby uzasadnić swoje religijne odpusty.
Podobnie jak w fundamentalizmie biblijnym, wszystkie prawa biblijne można podsumować
- Kochajcie Podstawową Tożsamość całym swoim sercem i całym umysłem
- Kochaj swojego bliźniego jak siebie samego
i podobnie można podsumować fundamentalizm inżynierii oprogramowania
- poświęć się podstawom zerowym z całą siłą i umysłem programowania
- i poświęcajcie się doskonałości innych programistów, tak jak dla siebie.
Również wśród biblijnych kręgów fundamentalistycznych wyciąga się silny i rozsądny wniosek
- Najpierw pokochaj siebie. Ponieważ jeśli nie bardzo się kochasz, pojęcie „kochaj swojego bliźniego jak siebie samego” nie ma większego znaczenia, ponieważ „jak bardzo siebie kochasz” jest linią odniesienia, powyżej której kochałbyś innych.
Podobnie, jeśli nie szanujesz siebie jako programisty i po prostu akceptujesz wypowiedzi i proroctwa jakiegoś programistycznego guru-natha BEZ kwestionowania podstaw, twoje cytaty i poleganie na Joshua Bloch (i tym podobnych) są bez znaczenia. Dlatego w rzeczywistości nie miałbyś szacunku dla innych programistów.
Podstawowe prawa programowania oprogramowania
- lenistwo jest zaletą dobrego programisty
- masz uczynić swoje życie programistycznym tak łatwym, leniwym, a zatem tak efektywnym, jak to możliwe
- masz za zadanie uczynić konsekwencje i wnętrzności twojego programowania tak łatwymi, leniwymi, a zatem jak najbardziej efektywnymi dla twoich sąsiadów-programistów, którzy pracują z tobą i podnoszą twoje wnętrzności programistyczne.
Stałe wzorców interfejsów to zły nawyk ???
Na podstawie jakich zasad fundamentalnie skutecznego i odpowiedzialnego programowania obejmuje ten religijny edykt?
Wystarczy przeczytać artykuł w Wikipedii na temat stałych wzorców interfejsów ( https://en.wikipedia.org/wiki/Constant_interface ), a głupie usprawiedliwienie to w stosunku do stałych wzorców interfejsu.
Whatif-No IDE? Kto na ziemi jako programista nie używałby IDE? Większość z nas to programiści, którzy wolą nie musieć dowodzić posiadania macho-estetycznego surwiwalizmu poprzez unikanie użycia IDE.
- Ponadto - poczekaj na drugich zwolenników programowania mikro-funkcjonalnego, jako na środek niepotrzebny IDE. Poczekaj, aż przeczytasz moje wyjaśnienie dotyczące normalizacji modelu danych.
Czy zanieczyszcza przestrzeń nazw zmiennymi nieużywanymi w bieżącym zakresie? Mogą to być zwolennicy tej opinii
- nie zdają sobie sprawy z normalizacji modelu danych i jej potrzeby
Używanie interfejsów do wymuszania stałych jest nadużywaniem interfejsów. Zwolennicy takich mają zły nawyk
- nie widząc, że „stałe” należy traktować jako kontrakt. Interfejsy służą do egzekwowania lub projekcji zgodności z umową.
Konwersja interfejsów na zaimplementowane klasy w przyszłości jest trudna, jeśli nie niemożliwa. Hah .... hmmm ... ???
- Dlaczego miałbyś chcieć angażować się w taki schemat programowania, jak trwałe utrzymanie? WIĘCEJ, po co poświęcać się tak WSPANIAŁEMU i złemu nawykowi programowania?
Niezależnie od wymówek, NIE MA ŻADNEGO WYMAGANIA, jeśli chodzi o FUNDAMENTALNIE SKUTECZNĄ inżynierię oprogramowania do delegitymizacji lub ogólnie zniechęcania do stosowania stałych interfejsu.
Nie ma znaczenia, jakie były pierwotne zamiary i stany mentalne ojców założycieli, którzy opracowali Konstytucję Stanów Zjednoczonych. Moglibyśmy omówić pierwotne intencje ojców założycieli, ale obchodzą mnie tylko pisemne oświadczenia Konstytucji Stanów Zjednoczonych. I obowiązkiem każdego obywatela USA jest wykorzystanie pisemnego fundamentalizmu literackiego, a nie niepisanych założeń założycielskich, konstytucji Stanów Zjednoczonych.
Podobnie nie obchodzi mnie, jakie „oryginalne” intencje twórców platformy Java i języka programowania miały dla interfejsu. Zależy mi na efektywnych funkcjach, które zapewnia specyfikacja Java, i zamierzam w pełni wykorzystać te funkcje, aby pomóc mi w spełnieniu podstawowych praw odpowiedzialnego programowania. Nie obchodzi mnie, czy jestem postrzegany jako „naruszający intencję interfejsów”. Nie obchodzi mnie, co Gosling lub ktoś Bloch mówi o „właściwym sposobie korzystania z Javy”, chyba że to, co mówią, nie narusza mojej potrzeby SKUTECZNEGO wypełniania podstaw.
Podstawą jest normalizacja modelu danych
Nie ma znaczenia, w jaki sposób model danych jest hostowany lub przesyłany. Bez względu na to, czy używasz interfejsów, wyliczeń, czy cokolwiek innego, relacyjnego lub bez SQL, jeśli nie rozumiesz potrzeby i procesu normalizacji modelu danych.
Najpierw musimy zdefiniować i znormalizować model danych zestawu procesów. A kiedy mamy spójny model danych, TYLKO wtedy możemy wykorzystać przepływ procesów jego komponentów do zdefiniowania zachowania funkcjonalnego i proces blokuje pole lub dziedzinę aplikacji. I tylko wtedy możemy zdefiniować API każdego procesu funkcjonalnego.
Nawet aspekty normalizacji danych zaproponowane przez EF Codda są obecnie poważnie kwestionowane i poważnie kwestionowane. np. jego oświadczenie w sprawie 1NF zostało skrytykowane jako dwuznaczne, niedopasowane i nadmiernie uproszczone, podobnie jak reszta jego oświadczeń, szczególnie w związku z pojawieniem się nowoczesnych usług danych, technologii repo i transmisji. IMO, oświadczenia EF Codda powinny zostać całkowicie porzucone i należy opracować nowy zestaw bardziej matematycznie wiarygodnych stwierdzeń.
Rażącą wadą EF Codda i przyczyną jego niedopasowania do skutecznego zrozumienia przez człowieka jest jego przekonanie, że ludzko postrzegalne wielowymiarowe, zmienne wymiary można skutecznie postrzegać poprzez zestaw fragmentarycznych dwuwymiarowych mapowań.
Podstawy normalizacji danych
Czego EF Codd nie wyraził.
W ramach każdego spójnego modelu danych są to sekwencyjne stopniowane stopniowanie spójności modelu danych do osiągnięcia.
- Jedność i tożsamość instancji danych.
- zaprojektować ziarnistość każdego składnika danych, przy czym ich ziarnistość jest na poziomie, na którym każde wystąpienie składnika można jednoznacznie zidentyfikować i pobrać.
- brak aliasingu instancji. tzn. nie ma żadnych środków, dzięki którym identyfikacja wytworzy więcej niż jedną instancję komponentu.
- Brak przesłuchu instancji. Nie istnieje konieczność użycia jednego lub więcej innych wystąpień komponentu, aby przyczynić się do identyfikacji wystąpienia komponentu.
- Jedność i tożsamość komponentów / wymiarów danych.
- Obecność usuwania aliasingu komponentów. Musi istnieć jedna definicja, w której można jednoznacznie zidentyfikować komponent / wymiar. Która jest podstawową definicją komponentu;
- gdzie podstawowa definicja nie spowoduje ujawnienia pod wymiarów lub elementów składowych, które nie są częścią zamierzonego elementu;
- Unikalne środki do usuwania składników. Musi istnieć jedna i tylko jedna taka definicja usuwania aliasingu dla komponentu.
- Istnieje jeden i tylko jeden interfejs lub umowa definicji służąca do identyfikacji komponentu macierzystego w hierarchicznej relacji komponentów.
- Brak przesłuchu komponentu. Nie ma potrzeby używania elementu innego komponentu w celu przyczynienia się do ostatecznej identyfikacji komponentu.
- W takim związku rodzic-dziecko definicja identyfikująca rodzica nie może zależeć od części zestawu elementów składowych dziecka. Element członkowski tożsamości rodzica musi być kompletną tożsamością dziecka bez odwoływania się do jednego lub wszystkich dzieci dziecka.
- Zapobieganie dwumodalnym lub multimodalnym wyglądom modelu danych.
- Gdy istnieją dwie kandydujące definicje komponentu, jest to oczywisty znak, że istnieją dwa różne modele danych pomieszane jako jeden. Oznacza to, że występuje niespójność na poziomie modelu danych lub na poziomie pola.
- Obszar zastosowań musi wykorzystywać spójny jeden i tylko jeden model danych.
- Wykryj i zidentyfikuj mutację komponentu. O ile nie wykonałeś statystycznej analizy składowej ogromnych danych, prawdopodobnie nie widzisz ani nie widzisz potrzeby leczenia mutacji składników.
- W modelu danych niektóre jego komponenty mogą mutować cyklicznie lub stopniowo.
- Tryb może być rotacją pręta lub rotacją transpozycji.
- Mutacja rotacji elementów mogłaby polegać na wyraźnym zamianie komponentów potomnych między komponentami. Lub gdzie należałoby zdefiniować zupełnie nowe komponenty.
- Mutacja transpozycyjna przejawiałaby się jako mutacja elementu wymiarowego w atrybut, i odwrotnie.
- Każdy cykl mutacji musi być zidentyfikowany jako odrębny modal danych.
- Wersjonuj każdą mutację. Tak, że możesz wyciągnąć poprzednią wersję modelu danych, gdy być może zajdzie potrzeba leczenia 8-letniej mutacji modelu danych.
W polu lub siatce międzyobsługowych aplikacji składowych musi istnieć jeden i tylko jeden spójny model danych lub istnieje sposób na identyfikację modelu / wersji danych.
Czy nadal pytamy, czy moglibyśmy użyć stałych interfejsu? Naprawdę
Zagadnienia związane z normalizacją danych są bardziej istotne niż to przyziemne pytanie. JEŚLI nie rozwiążesz tych problemów, zamieszanie, które Twoim zdaniem powodują stałe interfejsu, jest względnie niczym. Zilch.
Na podstawie normalizacji modelu danych określa się komponenty jako zmienne, właściwości, stałe interfejsu kontraktu.
Następnie określasz, które z nich mają zostać wprowadzone do wartości, umieszczenie konfiguracji właściwości, interfejsy, końcowe łańcuchy itp.
Jeśli musisz użyć wymówki, aby łatwiej zlokalizować komponent pod kątem stałych interfejsu, oznacza to, że masz zły nawyk nie praktykowania normalizacji modelu danych.
Być może chcesz skompilować model danych w wersji vcs. Że możesz wyciągnąć wyraźnie identyfikowalną wersję modelu danych.
Wartości zdefiniowane w interfejsach są całkowicie pewne, że nie można ich modyfikować. I możliwe do udostępnienia. Po co ładować zestaw końcowych ciągów do swojej klasy z innej klasy, gdy wszystko, czego potrzebujesz, to zestaw stałych?
Dlaczego więc nie opublikować umowy na model danych? Mam na myśli to, że jeśli potrafisz to spójnie zarządzać i normalizować, dlaczego nie? ...
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"
}
}
}
}
Teraz mogę odwoływać się do zakontraktowanych etykiet moich aplikacji w następujący sposób
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
To myli zawartość pliku jar? Jako programista Java nie dbam o strukturę słoika.
Czy to komplikuje zamianę środowiska uruchomieniowego motywowaną osgi? Osgi jest niezwykle skutecznym środkiem pozwalającym programistom na kontynuowanie złych nawyków. Są lepsze alternatywy niż osgi.
A dlaczego nie to? Nie ma wycieku prywatnych stałych do opublikowanej umowy. Wszystkie prywatne stałe powinny być zgrupowane w prywatny interfejs o nazwie „Stałe”, ponieważ nie chcę wyszukiwać stałych i jestem zbyt leniwy, aby wielokrotnie wpisywać „prywatny końcowy ciąg”.
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Być może nawet to:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Jedyny problem ze stałymi interfejsami, który warto rozważyć, to kiedy interfejs jest implementowany.
To nie jest „pierwotna intencja” interfejsów? Tak, jakbym dbał o „pierwotną intencję” ojców założycieli w tworzeniu Konstytucji Stanów Zjednoczonych, a nie o to, jak Sąd Najwyższy interpretowałby pisane listy Konstytucji USA?
W końcu mieszkam w krainie wolnych, dzikiej i ojczyźnie odważnych. Bądź odważny, bądź wolny, bądź dziki - skorzystaj z interfejsu. Jeśli moi koledzy programiści odmawiają użycia wydajnych i leniwych środków programowania, czy zgodnie ze złotą zasadą jestem zmuszony zmniejszyć wydajność programowania, aby dostosować się do ich? Być może powinienem, ale to nie jest idealna sytuacja.