Значение по сравнению с объектами Объекта (Доменный Управляемый Дизайн)

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
83
задан shA.t 10 September 2018 в 09:45
поделиться

5 ответов

Уменьшенный до существенного различия, идентификационные данные имеют значение для объектов, но не имеют значения для объектов значения. Например, чье-то Имя является объектом значения. Потребительский объект мог бы состоять из имени клиента (объект значения), List< Order> OrderHistory (Список объектов), и возможно Адрес по умолчанию (обычно объект значения). Потребительский Объект имел бы идентификатор, и каждый порядок будет иметь идентификатор, но Имя не должно; обычно, в объектной модели так или иначе, идентификационные данные Адреса, вероятно, не имеют значения.

объекты Значения могут обычно быть представлены как неизменные объекты; изменение одного свойства объекта значения по существу уничтожает старый объект и создает новый, потому что Вы не что касается с идентификационными данными как с содержанием. Правильно, Равняется методу экземпляра для Имени, возвратил бы "true", пока свойства объекта идентичны свойствам другого экземпляра.

Однако изменение некоторого атрибута объекта как Клиент не уничтожает клиента; Потребительский объект обычно изменяем. Идентификационные данные остаются тем же (по крайней мере, как только объект был сохранен).

Вы, вероятно, создаете объекты значения, не понимая его; каждый раз, когда Вы представляете некоторый аспект Объекта путем создания мелкомодульного класса, у Вас есть объект значения. Например, класс IPAddress, который имеет некоторые ограничения на допустимые значения, но состоит из более простых типов данных, был бы объектом значения. EmailAddress мог быть строкой, или это мог быть объект значения со своим собственным набором поведений.

довольно возможно, что даже объекты, которые имеют идентификационные данные в Вашей базе данных, не имеют идентификационных данных в Вашей объектной модели. Но самый простой случай является составным объектом некоторых атрибутов, которые имеют смысл вместе. Вы, вероятно, не хотите иметь Клиента. FirstName, Клиент. LastName, Клиент. MiddleInitial и Клиент. Заголовок, когда можно составить тех вместе как Клиента. Имя; они, вероятно, будут несколькими полями в Вашей базе данных к тому времени, когда Вы думаете о персистентности, но Ваша объектная модель не заботится.

99
ответ дан JasonTrue 24 November 2019 в 08:52
поделиться

Любой объект, который коллективно определяется всем этим атрибуты, является объектом значения. Если какое-либо изменение атрибутов у Вас есть новый экземпляр объекта значения. Поэтому объекты значения определяются как неизменные.

, Если объект не полностью определяется всеми его атрибутами тогда, существует подмножество атрибутов, которые составляют идентификационные данные объекта. Остающиеся атрибуты могут измениться, не переопределяя объект. Этот вид объекта не может быть определен в неизменном.

А более простой способ сделать различие состоит в том, чтобы думать об объектах значения как о статических данных, которые никогда не будут изменяться и объекты как данные, которые развиваются в Вашем приложении.

31
ответ дан Richard Dorman 24 November 2019 в 08:52
поделиться

Я не знаю, корректно ли следующее, но я сказал бы, что в случае Объекта адреса, мы хотим использовать его в качестве Объекта Значения вместо Объекта, потому что изменения в объекте были бы отражены на всех связанных объектах (Человек, например).

Берут этот случай: Вы живете в своем доме с некоторыми другими людьми. Если бы мы использовали бы Объект для Адреса, я утверждал бы, что был бы один уникальный Адрес, с которым связываются все объекты Человека. Если один человек съезжает, Вы хотите обновить его адрес. Если бы Вы обновили бы свойства Объекта Адреса, у всех людей был бы различный адрес. В случае Объекта Значения мы не были бы в состоянии отредактировать Адрес (так как это неизменно), и мы были бы вынуждены предоставить новый Адрес тому Человеку.

Делает этот звук правильно? Я должен сказать, что был также все еще смущен этим различием после чтения книги DDD.

Движение один шаг вперед, как это было бы смоделировано в базе данных? У Вас были бы все свойства Объекта адреса как столбцы в таблице Person, или Вы составите отдельную таблицу Address, которая также имела бы уникальный идентификатор? В последнем случае у людей, живущих в том же доме, каждый был бы различный экземпляр Объекта адреса, но те объекты будут тем же за исключением своего свойства ID.

6
ответ дан Christophe Herreman 24 November 2019 в 08:52
поделиться

I asked about this in another thread and I think I'm still confused. I may be confusing performance considerations with data modelling. In our Cataloging application, a Customer doesn't change until it needs to. That sounds dumb - but the 'reads' of customer data far outnumber the 'writes' and since many many web requests are all hitting on the 'active set' of objects, I don't want to keep loading Customers time and again. So I was headed down an immutable road for the Customer object - load it, cache it, and serve up the same one to the 99% of (multi-threaded) requests that want to see the Customer. Then, when a customer changes something, get an 'editor' to make a new Customer and invalidate the old one.

My concern is if many threads see the same customer object and it is mutable, then when one thread starts to change it mayhem ensues in the others.

My problems now are, 1) is this reasonable, and 2) how best to do this without duplicating a lot of code about the properties.

2
ответ дан 24 November 2019 в 08:52
поделиться

адрес может быть объектом или объектом значения, который зависит от занятого процесса. Объект адреса может быть объектом в приложении курьерской службы, но адрес может быть объектом значения в другом приложении. в приложении курьера имеет значение для адресного объекта

3
ответ дан 24 November 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: