Domain Services
са необходими, когато имате модел на домейн, защото има функционалност, която не е част от вашите обекти.
Помислете например за Repository
или Factory
. Интерфейсът за Repository
вероятно ще бъде във вашия Domain Layer
, но внедряването във вашия Infrastructure Layer
. С Factory
както изпълнението, така и интерфейсът ще бъдат във вашия Domain Layer
.
Тези услуги на домейн се използват от вашия приложен слой. Целта на приложния слой е да се увери, че всичко е на мястото си, така че моделът на домейн да може да върши работата си. Това може да означава зареждане на конкретни обекти от хранилища и след това извикване на специфични за домейна функции върху тях.
Валидирането трябва да бъде вътре в обект. Да предположим например, че имате клас Money
.
public class Money
{
public Money(string currency, int amount)
{
Currency = currency;
Amount = amount;
}
public int Amount { get; set; }
public string Currency { get; set; }
}
Ако на класа Money
не е разрешено да има отрицателна сума, къде бихте потвърдили това?
Най-доброто място за това е вътре в класа. Един субект е отговорен за собственото си състояние. В Money
клас това е лесно да се види, но например с Order
клас с OrderLines
Order
отговаря за проверката дали има дублиращи се OrderLine
елементи, които трябва да бъдат обединени (спестява разходи за доставка!)
person
Wouter de Kort♦
schedule
06.01.2012