Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. SOLID (5 принципів)

S - Single Responsibility Principle (SRP)

Кожен клас відповідає лише за одну відповідальність:

  • Money – зберігає інформацію про гроші.
  • Product – представляє товар.
  • WarehouseItem – містить інформацію про товар на складі.
  • Warehouse – керує складом.
  • Reporting – відповідає за генерацію звітів.
  • Cart – управляє кошиком покупок.

O - Open/Closed Principle (OCP)

Класи розширюються, але не змінюються. Наприклад, якщо потрібно додати нову валюту, достатньо створити новий клас(наприклад USD), що реалізує ICurrency.

L - Liskov Substitution Principle (LSP)

Об'єкти підкласів можуть використовуватись замість батьківського класу без змін у коді. Наприклад, EUR та USD можуть замінювати ICurrency.

I - Interface Segregation Principle (ISP)

Кожен інтерфейс містить лише необхідні методи. Наприклад, замінювати ICurrency має тільки властивості Symbol і Name, без зайвих методів.

D - Dependency Inversion Principle (DIP)

Використання ICurrency дозволяє коду працювати із будь-якими валютами без прив'язки до конкретних класів USD або EUR.

2. DRY (Don't Repeat Yourself)

В коді уникається дублювання логіки:

  • Money використовується у Product замість дублювання інформації про ціну.
  • WarehouseItem і Cart працюють із Product, не дублюючи атрибути товару.

3. KISS (Keep It Simple, Stupid)

Код простий і зрозумілий:

  • Кожен клас має чітко визначену роль.
  • Мінімум складних конструкцій, методи логічно організовані.
  • Використано зрозумілі назви змінних і методів.

4. YAGNI (You Ain't Gonna Need It)

В коді немає зайвого функціоналу, лише те, що потрібно:

  • Наприклад, у Warehouse відсутні складні логістичні функції, поки вони не знадобляться.
  • Cart реалізує лише базові операції додавання та видалення товару.

5. Composition Over Inheritance

Класи використовують композицію, а не наслідування:

  • WarehouseItem містить Product, а не наслідується від нього.
  • Cart використовує Dictionary<Product, int> замість створення окремого класу для кожного типу товару.

6. Program to Interfaces, not Implementations

  • Money працює з ICurrency, а не з конкретними валютами (USD, EUR).
  • Warehouse та Reporting використовують об'єкти класу WarehouseItem і Product, не залежачи від конкретних реалізацій.

7. Fail Fast

Код одразу перевіряє неправильні вхідні дані:

  • Money перевіряє, чи wholePart і cents не є від’ємними.
  • WarehouseItem.AddStock() і RemoveStock() перевіряють, чи кількість товару коректна.
  • WarehouseItem кидає ArgumentNullException, якщо передано null.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages