以前我有一种称为“搜索”的方法。该方法实际上做了两件事:搜索/返回找到的文章并计算结果集的一些数据。我现在创建了两种方法:一种用于搜索和返回文章。另一个搜索 AND 计算数据。
第一个仅执行搜索的方法:
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;
}
第二个搜索并计算统计数据:
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;
}
第二种方法的开头与第一种方法相同。第二种方法通过“out”参数返回统计信息。
有什么办法可以用不同的方法来计算统计数据吗?我可以直接从第二种方法中删除搜索,但随后我必须将所有变量定义两次(inactiveForDays、searchProfileGroups、searchBounds)。
最佳答案
public Dictionry<string, object> PrepareQueryValues(SearchModel query)
{
cleanQuery(query);
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("InactiveForDay", getinactiveForDays());
dic.Add("SearchProfileGroups",_manager.GetSearchProfileGroupsForSite(query.PropertyType));
dic.Add("SearchProfileGroups", setLocationOfInterest(query));
dic.Add("SearchBounds", _manager.GetSearchBounds(query.StreetID, query.SublocalityID));
dic.Add("ShopsList", getShops());
return dic;
}
所以你的第一个方法:
private List<SummaryRootEntity> search(int contentId,SearchModel query, bool includeTypeGroupFilters = true)
{
Dictionary<string, object> dic = PrepareQueryValues(query);
searchmodelDto.shops = (CastToProperType)dic["ShopsList"];
var filteredArticles = _articleService.Search(
contentId,
query,
(CastToProperType)dic["SearchBounds"],
(CastToProperType)dic["SearchProfileGroups"],
(CastToProperType)dic["InactiveForDays"],
includeTypeGroupFilters);
// apply ordering
var result = filteredArticles.ApplyOrdering(query.ForSaleOrRent, query.OrderBy, query.OrderDescending).ToList();
return result;
}
这样的东西应该有帮助,但我认为这有点过分了。
关于c# - 重构:结合两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38659211/