Если да, то собирать их отдельно в виде пакетов, потом подключать
Product product = _productRepository.Get(ProductSpecifications.ValidProductById(id));
CommandHandler должен вернуть состояние операции.
В частности, если вместо исполнения команды, она ставится в очередь, надо вернуть токен.
Но это только в случае если ты собираешься CQRS имплементировать в реальном приложении, а не для написания очередной бестолковой статьи о сферическом коне в вакууме...
ProductName - Для отображения. ProductNameHash - хеш необходимый для внутренних процессов (поиска, соответствия и.т.д).