S = zasada pojedynczej odpowiedzialności
Spodziewałbym się więc dobrze zorganizowanej struktury folderów / plików i hierarchii obiektów. Każdą klasę / element funkcjonalności należy nazwać, że jego funkcjonalność jest bardzo oczywista i powinna zawierać jedynie logikę do wykonania tego zadania.
Gdybyście zobaczyli ogromne klasy menedżerskie z tysiącem linii kodu, byłby to znak, że pojedyncza odpowiedzialność nie była przestrzegana.
O = zasada otwarta / zamknięta
Jest to w zasadzie pomysł, aby nowa funkcjonalność była dodawana poprzez nowe klasy, które mają minimalny wpływ na / wymagają modyfikacji istniejącej funkcjonalności.
Spodziewałbym się wielu zastosowań dziedziczenia obiektów, podtypów, interfejsów i klas abstrakcyjnych, aby oddzielić projekt elementu funkcjonalności od faktycznej implementacji, umożliwiając innym tworzenie i wdrażanie innych wersji obok, bez wpływu na oryginał.
L = zasada podstawienia Liskowa
Ma to związek z możliwością traktowania podtypów jako typu nadrzędnego. To wychodzi z pudełka w języku C #, jeśli implementujesz odpowiednią dziedziczoną hierarchię obiektów.
Spodziewałbym się zobaczyć kod traktujący wspólne obiekty jako ich typ podstawowy i wywołujące metody w klasach base / abstract zamiast tworzenia instancji i pracy na samych podtypach.
I = zasada segregacji interfejsu
Jest to podobne do SRP. Zasadniczo definiujesz mniejsze podzbiory funkcjonalności jako interfejsy i pracujesz z nimi, aby utrzymać system w stanie oddzielonym (np. FileManager
Może mieć pojedynczą odpowiedzialność za obsługę plików we / wy, ale może zaimplementować IFileReader
a, IFileWriter
który zawiera konkretne definicje metod do odczytu i pisanie plików).
D = zasada inwersji zależności.
Ponownie odnosi się to do utrzymania oddzielenia systemu. Być może chcesz być na poszukiwania wykorzystaniem biblioteki .NET Dependency wtrysk, używane w roztworze, takie jak Unity
lub Ninject
czy system ServiceLocator takich jak AutoFacServiceLocator
.