Да, можно использовать хранилище для хранения данных в службе домена. Однако, следует помнить, что служба домена должна быть отвязана от конкретного хранилища данных и работать с абстрактным интерфейсом, чтобы обеспечить гибкость и возможность легкой замены хранилища.
Чтобы реализовать доменный сервис, который будет обрабатывать несколько агрегатов без внедрения репозитория в домен, можно использовать подход CQRS (Command Query Responsibility Segregation). При этом можно создать два отдельных слоя - слой команд (для изменения данных) и слой запросов (для чтения данных).
Требование создания занятия в расписании только в случае, если у преподавателя нет занятия в то же время, можно реализовать на уровне доменной логики. В доменном слое можно создать соответствующее правило или инвариант и проверять его при попытке создания занятия.
Важно определить, где лучше размещать данную логику, чтобы избежать плохих практик по проектированию. Обычно правила бизнес-логики и проверки инвариантов лучше размещать на уровне домена, чтобы сделать доменную модель более выразительной и легкой для понимания. Однако, следует также учитывать принцип единственной ответственности и избегать перегруженности доменных сущностей. Если проверка наличия занятия у преподавателя только в данное время не относится к основным операциям доменной модели, то ее лучше разместить на уровне приложения или Use Case'а.
В целом, важно подходить к проектированию системы индивидуально, учитывая специфику задачи, требования и контекст использования.