Когда вы спрашиваете
Должны ли мои модели выходить из модели моего домена?
Я бы сказал, что, если это вообще возможно, вам следует избегать перетасовывания данных между различными наборами объектов в одной программе. Это может привести к тому, что вам придётся много скучно писать много скучного и подверженного ошибкам кода, у вас будет избыточный набор объектов DTO, которые должны зеркально отражать ваши доменные объекты, а также вы получите меньше пробега от методов, которые вы используете. пишите, потому что они работают только с DTO или объектами домена. В общем, это очень больно и мало что дает. Я пытаюсь иметь один набор объектов домена, который передается по всему приложению.
(Это не значит, что не бывает случаев, когда вам действительно нужно перемещать данные между различными наборами объектов, например, при создании антикоррупционного слоя. Просто не ищите проблем, если это не совсем так необходимо.)
Что касается
IShoppingCart shoppingCart = repository.GetShoppingCartByUserName(username);
//Do shopping cart logic like calculating taxes and stuff
//I would put these in services but not sure?
Одна из целей доменного дизайна - попытаться отделить бизнес-логику от кода инфраструктуры. Независимо от того, что вы можете выяснить, как рассчитать, используя только доменные объекты, лучше перейти к модели предметной области, где вы можете написать тесты для нее, которые не связаны с базой данных. Я хотел бы, чтобы служба извлекала совокупность объектов домена, затем выполняла вычисления бизнес-логики в объектах домена, а затем позволяла службе сохранять изменения состояния, вызванные вычислениями в объектах домена.