내 asp.net 핵심 웹 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)
}
이 그대로 REPO가 탄성 응답을 통과 의미한다. 제 질문은 제가 제 노선을 그려 놓은 것입니까? _client
을 제 컨트롤러로 옮기거나 건물 요청을 이동하여 model
을 _repo
으로 만들면 어떻게 될까요? 당신들은 어떻게 당신의 창고를 제대로 얻었습니까?
이 질문은 codereview.stackexchange.com –
에 물어볼 것을 제안합니다. 저장소의 목적은 지속성을 추상화하는 것입니다. ISearchResponse와 ISearchRequest는 탄성 검색 인터페이스라고 가정합니다. ISearchRespository에 정의되어서는 안됩니다. 왜냐하면 지속성이 비즈니스/도메인 계층으로 누출되기 때문입니다. 여기서 당신은 당신 자신의 클래스를 사용하거나 검색 요청이 충분히 단순하다면, 그것의 메소드 매개 변수를 사용하십시오. 지속성 유형이 도메인에 누출 될 때 DRY – Tseng
을 제외하고는 저장소가 거의 사용되지 않습니다. 검색 요청이 상당히 복잡하므로이를 구축하기 위해 도우미 클래스를 정의했습니다. 그래서 제 '레포 (repo)'가 내 '수색 모델 (SearcModel)'을 돌려주고 그 도우미가 제 레포 (repo)를 도와 줄 것을 제안하고 있습니까? –