Новый постер здесь, но я уже давно использую SO.
Я немного устал от C #-кодирования и у меня есть кое-что, что я хотел бы оптимизировать в своем коде. У меня есть 2 метода, которые имеют точно такой же код, но с другим объектом (у объекта есть несколько разных свойств, но те, которые используются, одинаковы в обоих методах). Запрос строится по-разному перед вызовом метода. Есть ли способ легко объединить методы, чтобы я все еще мог использовать его с одним или другим объектом?
private static void SetQueryMainFilters(DocumentQueryObject documentQuery, DocumentQuery repeaterQuery, out DocumentQuery outRepeaterQuery)
{
if (documentQuery.NodeID > 0)
{
repeaterQuery.WhereEquals(KenticoConstants.NODE_ID, documentQuery.NodeID);
}
if (documentQuery.DocumentID > 0)
{
repeaterQuery.WhereEquals(KenticoConstants.DOCUMENT_ID, documentQuery.DocumentID);
}
outRepeaterQuery = repeaterQuery;
}
private static void SetQueryMainFilters(DocumentQueryObject documentQuery, MultiDocumentQuery repeaterQuery, out MultiDocumentQuery outRepeaterQuery)
{
if (documentQuery.NodeID > 0)
{
repeaterQuery.WhereEquals(KenticoConstants.NODE_ID, documentQuery.NodeID);
}
if (documentQuery.DocumentID > 0)
{
repeaterQuery.WhereEquals(KenticoConstants.DOCUMENT_ID, documentQuery.DocumentID);
}
outRepeaterQuery = repeaterQuery;
}
Один из методов, который вызывает дублированный метод
public static MultiDocumentQuery RepeaterMultiDocumentQuery(DocumentQueryObject documentQuery)
{
MultiDocumentQuery repeaterQuery = new MultiDocumentQuery();
[...]
SetQueryMainFilters(documentQuery, repeaterQuery, out repeaterQuery);
return repeaterQuery;
}
В настоящее время у меня есть объект MultiDocumentQuery и DocumentQueryObject. Код одинаков в обоих методах, но объект различен.
Есть ли правильный способ сделать это, чтобы избежать дублирования кода? Если у вас есть лучшее решение, чтобы предложить мне, у меня открыты уши для предложений. Мне нужно иметь возможность вызывать построитель нескольких запросов или обычный построитель запросов с почти одинаковыми свойствами, но с другим поведением. Он использует Kentico DocumentQuery и MultiDocumentQuery.
Спасибо!