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