Я думаю, у вас есть две проблемы:
Во-первых, вам нужно знать, равен ли один экземпляр MyValueObject
другому экземпляру.
И, во-вторых, как это должно переводиться внастойчивость.
Я думаю, что вам нужно взглянуть на них по отдельности, так как кажется, что вы пытаетесь связать их слишком близко друг к другу, что, как мне кажется, нарушает некоторые принципы DDD - домен не должен знать / заботиться опостоянство.
Если вы не уверены в эффекте null
значения MyField
, либо (a) он должен вернуть другой тип, отличный от string
;(б) сделать так, чтобы он возвращал производную string
, такую как EmptyString
(или аналогичную реализацию Special Case );(c) или переопределите метод Equals
и укажите точно, что это означает, что эти экземпляры равны.
Если ваш ORM не может перевести определенное выражение (которое включает MyValueObject
) в SQL, то, возможно, егохорошо, чтобы выполнить более сложную работу на уровне персистентности (пусть сравнение происходит из перевода SQL - да, проблемы с производительностью, которые я знаю, но я уверен, что их невозможно решить), в пользу поддержания чистоты вашей доменной модели.Мне кажется, что решение должно происходить из «что лучше для модели предметной области».
@ Джеймс Андерсон делает хорошую мысль.Зарезервируйте null
для состояний ошибки и сбоя.Я думаю Особый случай кажется все более уместным.