Для легкого & абсолютно бесплатная опция, можно использовать Springloops, интегрированный с Basecamp (+ клиент SVN).
Примечание: интеграция SpringLoops с Basecamp не доступна в их бесплатной установке.
Взгляните на ответы на связанные вопросы здесь и здесь
1) Да - Если вы ' повторное сохранение VO в их собственной таблице
2) Если вы можете использовать свойство частного / защищенного идентификатора, тогда отлично. В качестве альтернативы вы можете использовать явные интерфейсы, чтобы «скрыть» свойство ID.
Но, читая ваш вопрос, вы предполагаете, что разработчики, которые видят свойство ID, автоматически предполагают, что объект является сущностью? В таком случае им требуется (пере) обучение.
3) Да, может, но со следующими ограничениями:
Также, подумайте вот о чем: ВО не должны оставаться. Было бы легко / эффективно воссоздавать всю ВО каждый раз, когда это необходимо? Если нет, сделайте это сущностью.
4) Зависит от того, как вы хотите реализовать свою агрегированную блокировку . Если вы хотите использовать решение Айенде , ответ - да. В противном случае вам понадобится механизм для обратного перехода по графу объектов к агрегатному корню.
5) Да. Не забывайте, что DDD - это Persistence Ignorant (в идеальном мире!).
Я считаю, что Реферал должен быть Entity . Представьте себе эти разговоры:
Диалог 1:
Диалог 2:
Разговор 1 предполагает, что «Реферал» является Сущностью , тогда как разговор 2 предполагает, что это ВО.
Еще одна вещь: изменяется ли Referral.ReferralType
за время его существования (есть еще один намекните, что это должна быть Сущность)? Если он не изменится, рассмотрите возможность использования полипорфизма и позвольте NH заниматься этим.
Надеюсь, что это поможет!