S = принцип единой ответственности
Поэтому я ожидал увидеть хорошо организованную структуру папок / файлов и иерархию объектов. Каждый класс / часть функциональности должен быть назван так, чтобы его функциональность была очевидна, и он должен содержать только логику для выполнения этой задачи.
Если бы вы увидели огромные классы менеджера с тысячами строк кода, это было бы признаком того, что единственная ответственность не была соблюдена.
O = открытый / закрытый принцип
Это в основном идея, что новые функциональные возможности должны быть добавлены через новые классы, которые оказывают минимальное влияние на / требуют модификации существующих функциональных возможностей.
Я ожидал бы увидеть много использования наследования объектов, подтипов, интерфейсов и абстрактных классов, чтобы отделить дизайн части функциональности от фактической реализации, позволяя другим прийти и реализовать другие версии вместе, не затрагивая оригинал.
L = принцип подстановки Лискова
Это связано со способностью рассматривать подтипы как их родительский тип. Это происходит из коробки в C #, если вы реализуете правильную иерархию унаследованных объектов.
Я ожидаю увидеть код, обрабатывающий общие объекты как их базовый тип и вызывающий методы в базовых / абстрактных классах, а не создающий и работающий с самими подтипами.
I = принцип разделения интерфейса
Это похоже на SRP. По сути, вы определяете меньшие подмножества функциональных возможностей как интерфейсы и работаете с ними, чтобы поддерживать развязанность вашей системы (например, FileManager
может иметь единственную ответственность при работе с Файловым вводом-выводом, но она может реализовывать IFileReader
и IFileWriter
содержать конкретные определения методов для чтения и написание файлов).
D = принцип обращения зависимостей.
Опять же, это относится к разделению системы. Возможно, вы будете в поисках использования библиотеки .NET Dependency Injection, используемой в решении, таком как Unity
или, Ninject
или в системе ServiceLocator, такой как AutoFacServiceLocator
.