我用我的asp.net核心web api使用彈性搜索。當涉及到倉庫責任時,我不太清楚界線在哪裏。存儲庫模式是如何真正完成的?
下面是我定義我的實現:
public SearchRespository: ISearchRespository<Product>
{
private ElasticClient _client
public async Task<ISearchResponse<Product>> SearchAsync(ISearchRequest request)
{
var response = _client.SearchAsync<Product>(request);
return await products;
}
. . . // others
}
在我的控制器:
public SearchController : Controller
{
private ISearchRespository _repo;
public SearchController(ISearchRespository repo)
{
_repo = repo;
}
public async Task<IActionResult> Search()
{
// build my search request from Request.Query
var response = await _client.SearchAsync(request);
var model = new SearchModel
{
Products = response.Documents;
Aggregations = response.Aggregations;
}
return Ok(model)
}
因爲它代表的回購協議通過彈性響應爲是。我的問題是我畫了我的線嗎?如果我只是將_client
移動到我的控制器或移動建築物請求並將model
設置爲_repo
?你們如何讓你的資料庫正確?
我建議你在codereview.stackexchange.com中提出這個問題 –
那麼,存儲庫的目的是抽象出持久性。我假設'ISearchResponse'和'ISearchRequest'是彈性搜索接口。不應該在'ISearchRespository'上定義它們,因爲那麼你的持久性會泄漏到你的業務/域層。在這裏你應該使用自己的類,或者如果你的搜索請求足夠簡單,使用它的方法參數。當你的持久化類型泄漏到你的域中時,除了DRY – Tseng
我的搜索請求涉及很多外,該存儲庫幾乎沒有用處,我已經定義了幫助類來構建它們。所以你建議我讓'repo'返回我的'SearcModel'並讓這些幫助者幫助我的'repo'? –