Насколько мне известно, каждый корень агрегата имеет свой собственный репозиторий, и репозиторий должен работать только с агрегатным объектом и его первичным ключом.
Например, для агрегатного назначения:< /p>
Код: Выделить всё
public class Appointment
{
public int Id { get; set; }
public DateOnly ForDate { get; set; }
public string ForTimeInterval { get; set; }
public Person ForPerson { get; set; }
}
одной версией репозитория для встреч может быть следующая:
Код: Выделить всё
public class AppointmentRepository
{
public Appointment FindById(int Id) { }
public void Appointment Add(Appointment appointment) { }
public void Remove (Appointment appointment) { }
public int Count() { }
}
Мой вопрос: разрешены ли какие-либо из следующих методов в репозитории или они должны быть в каком-то другом месте, например AppointmentDataAccess(DAO/DAL):
Код: Выделить всё
public class Repository
{
. . .
public IEnumerable FindAppointmentsForDate(DateOnly date) { }
public IEnumerable FindAppointmentsForPerson(Person person) { }
. . .
}
Кроме того, мне нужно сделать запрос, который возвращает все свободные интервалы времени для некоторой даты. TimeInterval также бесплатен, если количество резервирований не превышает X. Все это бизнес-логика, поэтому для меня имеет смысл иметь два метода в репозитории и проверять логику в службе приложений (или, может быть, в службе домена???). Данные используются для заполнения раскрывающихся списков или аналогичных элементов пользовательского интерфейса, что обычно я делаю, используя более абстрактную логику доступа к данным, такую как DAO/DAL и другие виды.
Вопрос помечен как CQRS, но это не так. необходимо опубликовать ответ на него.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... r-value-ob