Можем ли мы использовать объект значения в команде?
Предположим, у меня есть Магазин (агрегат), в котором есть одно значение объекта Address. В конструкторе объекта-значения Address я поместил некоторую логику проверки для адреса. Итак, если я использую этот объект Address в команде (CreateShopCmd), тогда он проверяется при создании команды, но то, что я хочу или прочитал, эта проверка должна присутствовать в обработчике команд.
Но проблема в том, что я должен снова поместить эту проверку в обработчик команд (поскольку проверка уже присутствует в конструкторе адреса), и если я не помещаю это в обработчик команд, тогда проверка будет происходить, когда я создаю объект Address в обработчик событий и назначить его агрегату Shop (что неверно)
Итак, пожалуйста, наставьте меня.
Ниже приведен пример кода
@Aggregate
@AggregateRoot
public class Shop {
@AggregateIdentifier
private ShopId shopId;
private String shopName;
private Address address;
@CommandHandler
public Shop(CreateShopCmd cmd){
//Validation Logic here , if not using the Address in
// in cmd
//Fire an event after validation
ShopRegistredEvt shopRegistredEvt = new ShopRegistredEvt();
AggregateLifecycle.apply(shopRegistredEvt);
}
@EventSourcingHandler
public void on(ShopRegistredEvt evt) {
this.shopName = evt.getShopName();
//Validation happend here if not put in cmd at the time of making
//Address object - this is wrong
this.address = new Address(evt.getCity(),evt.getCountry(),evt.getZipCode())
}
}
public class CreateShopCmd{
private String shopId;
private String shopName;
private String city;
private String zipCode;
private String country;
}
public ShopCreatedEvent{
private String shopId;
private String shopName;
private String city;
private String zipCode;
private String country;
}