Надлежащий способ создать URL на основе лямбда-выражения? - PullRequest
0 голосов
/ 19 февраля 2019

Я занимаюсь разработкой приложения и пытаюсь следовать правилам Роберта Мартина: «Чистая архитектура» .

Я начал с уровня данных и разработалудаленный источник данных с таким кодом:

public override async Task<IList<Entity>> GetAsync(Expression<Func<Entity, bool>> expression = null)
{

}

Где Выражение , по сути, шаблон спецификации , т. е. обычный непримечательный код, в котором мы просто устанавливаем Лямбда код с условием на входе для выбора сущности.

Этот подход прекрасно работает для локальных данных source(DB), потому что мы можем передать DbContext наше скомпилированное выражение.

Но здесь проблема с удаленным источником данных, потому что DbContext нет, и мне нужно создать URL на основе условия в выражении.

Как я могу это сделать?У меня есть несколько ключей фильтра в виде строковых объектов и в зависимости от выражения, хотя мне нужно создать URL , чтобы получить сущности по условию.

//Call inside UseCase
var res = await remoteDataSource.GetAsync(z=> z.Address == EntityPlace.Moscow);

//In DataSource class
private static string UrlAddress = @"https://my.address/?";
private const string UrlPlaceFilter = @"s%5Bplace%5D%5B0%5D=";
private List<string> UrlPlaces = new List<string>()
{
    "Moscow",
    "London",
    "Paris"
};

public override async Task<IList<Entity>> GetAsync(Expression<Func<Entity, bool>> expression = null)
{
// So according to our condition
//z=> z.Address == EntityPlace.Moscow
// We need to create a next URL somehow
//https://my.address/?s%5Bplace%5D%5B%5D=Moscow

}
...