Модель предметної області
Модель предметної області (англ. Domain model) — шаблон проєктування, який пропонує реалізувати бізнес-логіку, використовуючи підхід ООП.
Призначення
У випадку, коли бізнес-логіка містить складні правила, її найкраще описати у вигляді підходу ООП, використовуючи Rich модель. Таким чином, сутності предметної області моделюються у вигляді об'єктів.
Сутності можуть використовувати простий підхід, коли зв'язки між ними відповідають способу їх збереження (наприклад, у базі даних, коли одна сутність відповідає одній таблиці), або складний підхід, коли повністю ігнорується спосіб їх збереження, а до уваги береться саме модель предметної області. Таким чином, об'єкти містять логіку, доступ до даних обмежений відповідним модифікатором доступу, між об'єктами присутні зв'язки наслідування, а також існують класи, що описують логіку та не зберігаються у сховищі.
Перший підхід забезпечує легкий спосіб збереження даних, та він не такий гнучкий для зміни бізнес-логіки. На противагу йому, складний підхід легко дозволяє змінювати логіку, та виникають складності при збереженні чи завантаженні класів із пам'яті.
Реалізація
Нехай дано декілька типів знижок, які можна застосовувати на продукти. Тоді таку предметну область можна описати наступним чином.
interface IDiscount
{
void apply(Product product);
}
class ChristmasDiscount : IDiscount {
public void apply(Product product)
{
...
}
}
...
class Product
{
private double _price;
public Price => _price;
...
}