Путаница между DAL, Service Layer и репозиториями - PullRequest
1 голос
/ 17 октября 2011

Скажем, у меня есть простая модель, подобная этой (небольшая часть довольно большого приложения)

public class EHR : IEntity
{
    public int ID { get; set; }        
    public string UserName { get; set; }
    public DateTime CreationDate { get; set; }
    public virtual ICollection<PhysicalTest> PhysicalTests { get; set; }
}

public class PhysicalTest : IEntity
{    
    public int ID { get; set; }    
    public virtual EHR Ehr { get; set; }
    public Boolean IsDeleted { get; set; }
}

И я хочу простой способ получить физические тесты, которые НЕ удаляются для данной EHR.

Итак, я могу придумать три способа сделать это.

один - просто добавить метод в мой класс EHR. (Это не кажется плохой идеей, потому что я не хочу страдать от модель анемичного домена )

public IEnumerable<PhysicalTest> ActivePhysicalTests()
{
    return this.PhysicalTests.Where(!m=>m.IsDeleted).ToList();
}

другой создает метод расширения в классе EHRRepositoryExtensions:

public static class EHRRepositoryExtensions
{
    public static IEnumerable<PhysicalTest> Active(this IEnumerable<PhysicalTest> physicalTests)
    {
        return physicalTests.Where(test => !test.IsDeleted).OrderByDescending(test => test.CreationDate).ToList();
    }
}

Я также думаю, что мог бы расширить свой IRepositoryвключить метод, который возвращает только physsicalTests, которые не были удалены.

что-то вроде

public class EHRRepository : IRepository<EHR>
{
    //TODO: method that returns only the physsicalTests that arent deleted.
}

Я все еще пытаюсь понять многие концепции DDD и хочу, чтобы он был максимально чистым.

Какой из этих подходов вы бы порекомендовали?Какое практическое правило для подобных тем?

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 18 октября 2011

Первый подход рекомендуется, так как EHR - это ваш Совокупный корень, и он является экспертом по информации о своих физических тестах.

Второй подход не имеет значения, поскольку у вас уже есть модель, и вы можете вместо этого добавить этот метод к сущности.

Третий подход предпочтителен, только если список физических тестов требует много времени для загрузки из базы данных, однако вы можете использовать отложенную загрузку, но если вы хотите отделить выборку от домена или не используете включенную отложенную загрузку Затем ORM поместит его в качестве метода запроса в хранилище

...