Я занимаюсь разработкой приложения и пытаюсь следовать правилам Роберта Мартина: «Чистая архитектура» .
Я начал с уровня данных и разработалудаленный источник данных с таким кодом:
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
}