S = єдиний принцип відповідальності
Тож я очікую побачити добре організовану структуру папок / файлів та ієрархію об’єктів. Кожен клас / фрагмент функціональності повинен бути названий таким, що його функціональність дуже очевидна, і він повинен містити лише логіку для виконання цього завдання.
Якщо ви побачили величезні класи менеджерів із тисячею рядків коду, це було б ознакою того, що єдиної відповідальності не дотримувалися.
O = відкритий / закритий принцип
В основному це ідея про те, що нові функції повинні бути додані через нові класи, які мають мінімальний вплив на / потребують модифікації існуючої функціональності.
Я б очікував, що ви побачите багато використання спадкового об'єкта, підтипу, інтерфейсів та абстрактних класів, щоб відокремити дизайн певного функціоналу від фактичного втілення, що дозволить іншим придумати та впровадити інші версії поряд, не впливаючи на це. оригінальний.
L = принцип заміщення Ліскова
Це пов'язано з можливістю трактувати підтипи як їх батьківський тип. Це виходить із поля в C #, якщо ви реалізуєте належну ієрархію об'єктів.
Я очікував би побачити код, що розглядає загальні об'єкти як їх базовий тип та методи виклику на базових / абстрактних класах, а не інстанціювати та працювати над самими підтипами.
I = Принцип поділу інтерфейсу
Це схоже на SRP. В основному, ви визначаєте менші підмножини функціональності як інтерфейси і працюєте з тими, щоб система не була розв'язана (наприклад, FileManager
може мати єдину відповідальність за роботу з File I / O, але це могло б реалізувати a IFileReader
і IFileWriter
містило конкретні визначення методу для читання і написання файлів).
D = Принцип інверсії залежності.
Знову ж це стосується збереження системи, яка не є роз'єднаною. Можливо, ви будете шукати для використання бібліотеки .NET Dependency Injection, яка використовується в такому рішенні, як система Unity
або Ninject
ServiceLocator, наприклад AutoFacServiceLocator
.