В какой момент лучше выполнять проверку в DDD
Подскажите пожалуйста в какой момент лучше в выполнять проверку:
Представим себе стандартную ситуацию, допустим у нас есть какая то упаковка, в нее необходимо добавить какие то элементы, и сохранить. Но это действие сопряжено с некоторыми особенностями предметной области, по условию мы не можем добавит в упаковку элементы, которые не прошли предыдущую стадию, например они не окрашены.
Так вот, мы собираем данные с уровня представления, передаем их уровню сервиса прикладного уровня из которого начинаем вызывать модели предметной области. Пусть будет так, что мы хотим создать новую упаковку. Из репозитория получаем экземпляр этой упаковки с нулевм id (т.к. его еще нет в БД) и хотим добавить в список элементов этой упаковки наши элементы пришедшие с уровня представления. Вот тут-то и основной вопрос, должны ли мы разрешать добавлять в упаковку элементы и проверять всю валидность в момент сохранения или мы должны заблокировать добавление элементов в упаковку на самом этапе добавления их в коллекцию? Не судите строго, считаю это важным вопросом, потому как условие добавления - это по сути часть логики предметной области, т.е. по большому счету упаковка(или сервис доменного уровня) должна иметь метод по добавлению элементов с соответствующей проверкой. Так же хотел узнать, не будет ли это избыточным моментом?
Изменено:
считаю, что проверка должна быть в предметной области, чтобы логика не перетекала в слой сервисов прикладного уровня.
Но как быть, если сохранение этой упаковки затронет еще какие-то сущности, например элементы, которые были на складе окрашенной продукции должны быть перемещены в упаковку. Получается что нужно перенести часть логики, но уже на инфраструктурный уровень? Но этого бы очень не хотелось делать.
p.s. немного не в тему, но еще маленький вопрос, есть ли способ сделать так, чтобы какой-то сторонний класс например репозиторий, имел возможность создавать экземпляры другого класса, если у этого класса закрытый конструктор, короче суть в том, что я хочу сделать так, чтобы агрегаты создавались только из репозиториев.