Представьте, что у вас есть сущность, которая имеет некоторые отношения с другими сущностями, и вы хотите загрузить только некоторые из этих сущностей, чтобы отобразить их в разных представлениях.
Например, с учетом этой сущности:
public class Category
{
public int id;
public Category child;
public Category parent;
}
В представлении «ShowChild» вы не хотите загружать свойство «parent», поскольку оно не отображается.
Итак, с учетом этого сценария я реализовал очень хорошую «систему» в своем хранилище для загрузки сущностей из БД, заполняющих только те свойства, которые я хочу. Это работает так:
Категория категории = repo.FindCategory (id, (int) (LoadLevel.basic | LoadLevel.Child))
Так что теперь у меня есть экземпляр категории с загруженными только свойствами id и Child.
Дилемма, с которой я здесь сталкиваюсь, заключается в том, что если я определю LoadLevel в моем слое serviceLayer (где он должен быть), мне придется написать два метода, «LoadCategoryWithChild» и «LoadCategoryWithParent», по одному на каждый класс обслуживания. вид (СУХОЕ нарушение?).
public class CategoryService
{
public Category LoadCategoryWithChild(int id)
{
int loadlevel = (int) (LoadLevel.Basic | LoadLevel.Child);
return repo.FindCategory(id, loadlevel);
}
}
ИЛИ, другой вариант, который я вижу, это определить уровень загрузки в контроллере (нарушение MVC?) И реализовать только один метод в моем классе обслуживания:
public class CategoryService
{
public Category LoadCategory(int id, int loadlevel)
{
return repo.FindCategory(id, loadlevel);
}
}
Какой вариант будет лучше? Я думаю, что нарушение DRY намного хуже, поскольку подразумевает написание большого количества избыточного кода.