基于lambda表达式创建URL的正确方法?

时间:2019-02-19 02:53:37

标签: c# lambda architecture repository-pattern specification-pattern

我正在开发一个应用程序,并尝试遵循 Robert Martin的:“ Clean Architecture”

我从数据层开始,并设计了一个远程数据源 里面有这种代码:

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

}

其中 Expression 本质上是 Specification Pattern ,即通常不变的代码,我们只需在输入的条件下设置 Lambda 代码即可选择实体。

此方法对本地数据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

}

0 个答案:

没有答案