При просмотре проекта Evans на образце проекта DDD я замечаю, что в объекте Cargo
Evans использует номер дорожки, который является объектом значения. Почему он не выбрал простой string tracknumber
вместо этого выбирает объект ценности для идентификации? Вот отрывок из Эванс:Использование объекта value в качестве идентификатора в объекте
public class Cargo implements Entity<Cargo> {
private TrackingId trackingId
}
public final class TrackingId implements ValueObject<TrackingId> {
private String id;
/**
* Constructor.
*
* @param id Id string.
*/
public TrackingId(final String id) {
Validate.notNull(id);
this.id = id;
}
Мы можем добиться того же самого в мире .Net, у нас есть переменная readonly, которая устанавливается только через конструктор и не может быть изменена позже или только без getter no setter. – kamal
Конечно, но тогда логика будет находиться в объекте Cargo, а не в TrackingId. Точка, которую я делал, - это подход Value Object, который инкапсулирует эту логику в идентификатор отслеживания. – David
@kamal. TrackingId также сможет выполнять другие полезные вещи, которые объект Cargo не нужен или не хочет знать, например, форматирование по запросу клиента, присвоение следующего доступного идентификационного номера и другая сложная логика, которая более чем оправдывает ее существование , ура – Berryl