Вообще говоря, ваш рецепт должен заботиться только об уникальном идентификаторе ингредиента, а не о его деталях. Детали ингредиента не требуются для согласованности рецепта.
Я бы предположил, что какое-то действие (например, пользователь, взаимодействующий с пользовательским интерфейсом) добавит ингредиенты в рецепт. Я также предположил бы, что ингредиенты, которые могут быть добавлены, получены из запроса, который возвращает только действительные ингредиенты. Если у вас нет причин беспокоиться о том, что что-то / кто-то собирается подорвать этот процесс, вы, скорее всего, потратите время на решение проблемы, которая вряд ли будет реальной.
Если это, на самом деле, реальная проблема беспокойство, тогда да, вы можете проверить, что ингредиенты существуют, прежде чем добавлять их. Однако, это, вероятно, лучше всего сделать вблизи границы рецепта B C в валидаторе команды.
Ограниченный контекст является концептуальным - он (обычно) не представлен одним классом. Я упоминаю об этом, потому что вы спрашиваете
Нужно ли вводить доменную службу в рецепт B C. , , ?
Вы на самом деле не "вводите" в B C. Опять же, если вам действительно нужна эта проверка, скорее всего, у вас есть класс проверки, который запрашивает ингредиент B C через API или базу данных, чтобы убедиться, что он существует.
рецепт B C подпишется и обновит свои ингредиенты для любых изменений (например, цена / название).
В этом не должно быть необходимости. Рецепт имеет ссылку на каждый из его ингредиентов, поэтому, когда вы запрашиваете рецепт, вы запрашиваете как список ингредиентов, так и детали этих ингредиентов. В зависимости от вашей настройки это может быть SQL соединение или что-то еще (есть много разных способов сделать это в зависимости от вашей настройки). Как правило, следует избегать кэширования сведений об ингредиентах в квитанции B C, если только у вас нет особых опасений относительно производительности. Кэширование всегда добавляет сложности.
Одна из вещей, которые вы обнаружите, продолжая работать с CQRS, - это то, что многие проблемы, которые вы обычно считаете «командными проблемами», на самом деле гораздо легче решить на стороне запроса.