Я хочу написать фабричный метод для создания объекта, который является корнем агрегата.Сигнатура фабричного метода для совокупного корня
Должен ли метод принимать агрегированные дочерние сущности и значения в качестве экземпляров объектов или принимать только примитивные типы?
Например, если бы я имел Субъект компьютер, состоящий из процессора и объекта памяти, если фабричный метод принимает форму:
public Computer NewComputer(
string computerName,
int processorCores,
int processorClockSpeed,
string memoryType,
int memoryRam)
{
...
}
или
public Computer NewComputer(
string computerName,
Processor processor,
Memory memory)
{
...
}
это только вопрос вкуса, или есть какие-то серьезные соображения здесь?
ли какая-нибудь разница, если процессор и память были объектами значение? – sandy
Да, действительно. Если компьютер является сущностью (будь то агрегированный корень или нет), а процессор и память - это объекты ценности, то экземпляр компьютера _must_ создает их внутренне. «Внедрение» их было бы совершенно бессмысленным, поскольку это было бы не чем иным, как глупой копией-операцией. –
Это была бы более чем глупая операция копирования: это было бы инкапсулирование ответственности за создание объектов где-то в другом месте (например, на заводе или в репозитории). Если у вас есть агрегированный корень «PurchaseOrder», который содержит коллекцию объектов LineItem (среди прочего), что бы выглядел конструктор 'BuyOrder'? –