Я не знаю, корректно ли следующее, но я сказал бы, что в случае Объекта адреса, мы хотим использовать его в качестве Объекта Значения вместо Объекта, потому что изменения в объекте были бы отражены на всех связанных объектах (Человек, например).
Берут этот случай: Вы живете в своем доме с некоторыми другими людьми. Если бы мы использовали бы Объект для Адреса, я утверждал бы, что был бы один уникальный Адрес, с которым связываются все объекты Человека. Если один человек съезжает, Вы хотите обновить его адрес. Если бы Вы обновили бы свойства Объекта Адреса, у всех людей был бы различный адрес. В случае Объекта Значения мы не были бы в состоянии отредактировать Адрес (так как это неизменно), и мы были бы вынуждены предоставить новый Адрес тому Человеку.
Делает этот звук правильно? Я должен сказать, что был также все еще смущен этим различием после чтения книги DDD.
Движение один шаг вперед, как это было бы смоделировано в базе данных? У Вас были бы все свойства Объекта адреса как столбцы в таблице Person, или Вы составите отдельную таблицу Address, которая также имела бы уникальный идентификатор? В последнем случае у людей, живущих в том же доме, каждый был бы различный экземпляр Объекта адреса, но те объекты будут тем же за исключением своего свойства ID.
Обычно в Rails соединения выполняются как символ (или как хэш для соединений второго порядка), представляющий соединение по идентификатору, и вы используете условия для его фильтрации. Если вам нужно сделать это, как показано, вы можете использовать ActiveRecord sanitize_sql_array
для очистки строки SQL, например:
sanitize_sql_array(["LEFT JOIN blah AS blah2 ON blah2.title = ?", @blah.title])