Mnemoniki dla zestawu zasad projektowania: pojedyncza odpowiedzialność, otwarte-zamknięte, podstawienie Liskowa, segregacja interfejsu, inwersja zależności
Niektórzy mówią, że jeśli doprowadzisz ich ekstremalne zasady do SOLID, skończysz na programowaniu funkcjonalnym . Zgadzam się z tym artykułem, ale myślę, że niektóre semantyki zostały utracone podczas przejścia z interfejsu / obiektu do funkcji / zamknięcia i chcę wiedzieć, w jaki sposób programowanie funkcjonalne może złagodzić utratę. Z artykułu: …
Mam moduł, powiedz „M”, który ma kilku klientów, powiedz „C1”, „C2”, „C3”. Chcę podzielić przestrzeń nazw modułu M, tj. Deklaracje interfejsów API i danych, które udostępnia, do plików nagłówkowych w taki sposób, aby - dla każdego klienta widoczne są tylko wymagane przez niego dane i interfejsy API; reszta przestrzeni nazw …
Dużo słyszę od praktyków TDD , że jedną z zalet TDD jest to, że zmusza programistów do przestrzegania zasad SOLID (pojedyncza odpowiedzialność, otwarte zamknięcie, podstawienie Liskowa, segregacja interfejsu i inwersja zależności). Ale jak dla mnie wystarczy napisać kilka testów (przede wszystkim test jednostkowy), aby zrozumieć, że ważne jest, aby postępować …
Właśnie zaczynam od RxJava , implementacji Java ReactiveX (znanej również jako Rx i Reactive Extensions ). Coś, co naprawdę uderzyło mnie był ogromny rozmiar RxJava w płynnej klasy : ma 460 sposobów! Aby być uczciwym: Istnieje wiele metod, które są przeciążone, co znacznie zwiększa całkowitą liczbę metod. Być może ta …
Tło: opracowuję strukturę przesyłania wiadomości. Ramy te umożliwią: wysyłanie wiadomości za pośrednictwem magistrali usług subskrybowanie kolejek na szynie komunikatów subskrybowanie tematów na szynie wiadomości Obecnie używamy RabbitMQ, ale wiem, że w najbliższej przyszłości przejdziemy do Microsoft Service Bus (w lokalu). Planuję utworzyć zestaw interfejsów i implementacji, aby po przejściu na …
Załóżmy na przykład, że masz program do gier konsolowych, który ma wszystkie metody wejścia / wyjścia do iz konsoli. Byłoby inteligentny, aby utrzymać je wszystkie w jednej inputOutputklasie lub przerwać je do większej liczby klas konkretnych jak startMenuIO, inGameIO, playerIO, gameBoardIO, itd. Tak, że każda klasa ma około 1-5 metodami? …
Rozumiem intencję zasady otwartego zamknięcia. Ma to na celu zmniejszenie ryzyka zepsucia czegoś, co już działa, podczas modyfikowania go, poprzez nakazanie próby rozszerzenia bez modyfikacji. Miałem jednak pewne problemy ze zrozumieniem, w jaki sposób ta zasada jest stosowana w praktyce. W moim rozumieniu istnieją dwa sposoby zastosowania tego. Przed i …
Podczas czytania artykułów o ISP wydaje się, że istnieją dwie sprzeczne definicje ISP: Zgodnie z pierwszą definicją (patrz 1 , 2 , 3 ), ISP stwierdza, że klasy implementujące interfejs nie powinny być zmuszane do implementacji funkcji, których nie potrzebują. Tak więc interfejs tłuszczuIFat interface IFat { void A(); void …
Zainspirowany tą odpowiedzią: Wymaga tego zasada substytucji Liskowa W podtypie nie można wzmocnić warunków wstępnych. Warunki podrzędne nie mogą zostać osłabione w podtypie. Niezmienniki nadtypu muszą być zachowane w podtypie. Ograniczenie historii („reguła historii”). Obiekty są uważane za modyfikowalne tylko za pomocą ich metod (enkapsulacji). Ponieważ podtypy mogą wprowadzać metody, …
Istnieje klasa LinkedList z funkcjami takimi jak add_first (), add_last (), add_after (), remove_first (), remove_last () i remove () Teraz istnieje stos klas, który zapewnia funkcje takie jak push (), pop (), peek () lub top (), a do implementacji tych metod rozszerza metody klasy LinkedList. Czy jest to …
Zaczynam dopiero eksplorować SOLID i nie jestem pewien, czy czytanie z plików i pisanie do plików to ta sama odpowiedzialność. Celem jest ten sam typ pliku; Chcę czytać i pisać .pdf w mojej aplikacji. Aplikacja znajduje się w Pythonie, jeśli to robi jakąkolwiek różnicę.
Jakiś czas temu przeczytałem na odpowiedzi Przepełnienie stosu, której nie mogę znaleźć, zdanie wyjaśniające, że powinieneś przetestować publiczne interfejsy API, a autor powiedział, że powinieneś przetestować interfejsy. Autor wyjaśnił również, że jeśli zmieni się implementacja metody, nie trzeba modyfikować przypadku testowego, ponieważ spowoduje to zerwanie umowy zapewniającej działanie testowanego systemu. …
Próbuję wyjaśnić zasadę inwersji zależności moim (głównie młodszym) kolegom. Jak możemy zdefiniować, która jest „polityką wysokiego poziomu”, a która „szczegółem niskiego poziomu” w oprogramowaniu? Na przykład, jeśli nasze oprogramowanie automatyzuje przepływ pracy kilku aplikacji biznesowych, dlaczego mówimy, że automatyzacja przepływu pracy jest polityką wysokiego poziomu, a aplikacje biznesowe są szczegółami?
Robię testy jednostkowe i na jednej z moich klas muszę wysłać wiadomość e-mail z jednej z metod, więc za pomocą wstrzykiwania konstruktora wstrzykuję instancję Zend_Mailklasy, która jest w środowisku Zend. Teraz niektórzy twierdzą, że jeśli biblioteka jest wystarczająco stabilna i nie zmienia się często, nie trzeba jej owijać. Zakładając, że …
Jestem całkiem nowy w zasadach projektowania SOLID . Rozumiem ich przyczynę i korzyści, ale jednak nie stosuję ich do mniejszego projektu, który chciałbym zreformować jako praktyczne ćwiczenie z wykorzystaniem zasad SOLID. Wiem, że nie ma potrzeby zmiany aplikacji, która działa idealnie, ale i tak chcę ją zrefaktoryzować, aby zyskać doświadczenie …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.