Zuvor hatte ich eine Methode namens "Search". Diese Methode hat tatsächlich zwei Dinge getan: Gesucht/gab die gefundenen Artikel zurück und es berechnete einige Daten des Resultsets. Ich habe jetzt zwei Methoden entwickelt: eine zum Suchen und Zurückgeben der Artikel. Die andere Sucht UND berechnet die Daten.Refactoring: Kombination von zwei Methoden
Die erste Methode, die nur die Suche durchführt:
private List<SummaryRootEntity> search(int contentId,SearchModel query, bool includeTypeGroupFilters = true)
{
cleanQuery(query);
var inactiveForDays = getinactiveForDays();
var searchProfileGroups = _manager.GetSearchProfileGroupsForSite(query.PropertyType);
setLocationOfInterest(query);
var searchBounds = _manager.GetSearchBounds(query.StreetID, query.SublocalityID);
var shopsList = getShops();
searchmodelDto.shops = shopsList;
var filteredArticles = _articleService.Search(
contentId,
query,
searchBounds,
searchProfileGroups,
inactiveForDays,
includeTypeGroupFilters);
// apply ordering
var result = filteredArticles.ApplyOrdering(query.ForSaleOrRent, query.OrderBy, query.OrderDescending).ToList();
return result;
}
Die zweite, die Statistiken sucht und berechnet:
private List<SummaryRootEntity> searchWithStats(
int contentId,
SearchModel query,
out FacetStatisticsModel stats,
bool includeTypeGroupFilters = true)
{
cleanQuery(query);
var inactiveForDays = getinactiveForDays();
var searchProfileGroups = _manager.GetSearchProfileGroupsForSite(query.Type);
setLocationOfInterest(query);
var searchBounds = _manager.GetSearchBounds(query.StreetID, query.SublocalityID);
var shopsList = getShops();
query.shops = shopsList;
var filteredArticles = _articleService.Search(
contentId,
query,
searchBounds,
searchProfileGroups,
inactiveForDays,
includeTypeGroupFilters);
var displaySearchResultSummary = getDisplaySearchResult ?? true;
var stats = _articleService.GetStatistics(
Site.ContentRoot.Id,
shopsList,
inactiveForDays,
displaySearchResultSummary,
searchProfileGroups,
filteredArticles,
query,
searchBounds,
Site.DefaultCultureInfo);
// apply ordering
var result = filteredArticles.ApplyOrdering(query.ForSaleOrRent, query.OrderBy, query.OrderDescending).ToList();
return result;
}
Der Beginn des zweiten Verfahrens die gleiche wie die erste. Die zweite Methode gibt Statistiken über den Parameter "out" zurück.
Gibt es eine Möglichkeit, die Berechnung von Statistiken in einer anderen Methode zu erhalten? Ich könnte die Suche nur aus der zweiten Methode herausreißen, aber dann müsste ich alle Variablen zweimal definieren (inactivForDays, searchProfileGroups, searchBounds).
Ihre zweite Funktion füllt nie den out-Parameter, soweit ich sehen kann. – Nyerguds
Es tut jetzt, Typo – user2939331