Я занимаюсь разработкой веб-API .NET Core с использованием .NET Core 2.0 и Entity Framework 2.0. Проект и особенно количество моделей представления продолжают расти, и сложность становится более интенсивной (больше вложенных моделей). Основной вопрос моего вопроса заключается в том, что модели представлений имеют много подмоделей.
Держу пари, я не использую правильные ключевые слова для поиска в Google, потому что не могу найти то, что хочу знать.
В настоящее время я запрашиваю и отображаю их (согласно некоторой определенной логике) непосредственно через DbContext (каждый раз, иначе для каждой модели представления). Например:
List<MyViewModel1> items = await MyDbContext.MyDbModel1
.Where(dbm1 => dbm1.SomeValue > 10)
.Select
(
dbm1 => new MyViewModel1
{
ValueName = dbm1.SomeValue,
NestedModel1 = new NestedViewModel1
{
SomeValue1 = dbm1.OtherTableModel1.Value1,
SomeValue2 = dbm1.OtherTableModel1.Value2
},
NestedModel2 = (!dbm1.OtherTableModel2Id.HasValue) ? null :
new NestedViewModel2
{
SomeCalculatedValue = dbm1.OtherTableModel2.Value1 + dbm1.OtherTableModel2.Value2,
SomeOtherValue = dbm1.OtherTableModel2.Value3
}
}
)
.ToListAsync();
Теперь проблема в том, что NestedViewModel2 (модель с вычислением) привязана к нескольким моделям представлений, и до сих пор я пишу эти вычисления каждый раз так же, как описано выше (для MyViewModel1, MyViewModel2, MyViewModel3, ...). И как это, требования меняются регулярно. И каждый раз, когда меняются требования, мне приходится определять все места в моем растущем коде и фиксировать вычисления в нескольких местах.
Этот подход не следует за СУХОЙ (не повторяйтесь).
Но я не могу найти информацию, если можно (и как) написать некоторые собственные методы расширения linq (какие рамки сущности будут понимать для преобразования linq в SQL), например:
- SelectViewModel1WithValueGreaterThan (это DbSet, int большееThan)
- SelectViewModel2List (этот DbSet)
- SelectViewModel3Details (этот DbSet)
и, особенно, вложенные модели выбираются в одном месте (это можно вызвать из вышеупомянутых методов).
- SelectNestedModel1 (???)
- SelectNestedModel2 (???) * +1027 *
Любые подсказки для меня, как упаковать эти запросы в пользовательские методы расширения linq, чтобы код следовал принципу СУХОЙ и мог использоваться повторно?