У меня есть следующие методы:
protected static void updateExistingSection(XmlDocument doc,
XmlNode rootNode, string sectionTag, CreateSection createSection,
Func<XmlNode[]> createChildNodes, Action<XmlNode> firstSection)
{
IEnumerable<XmlNode> sections =
getChildNodesByName(rootNode, sectionTag);
if (sections.Count() < 1)
{
rootNode.AppendChild(createSection(doc, createChildNodes()));
return;
}
removeSubsequentNodes(sections, rootNode, firstSection);
}
private static void updateExistingCredentialsSection(XmlDocument doc,
XmlNode rootNode, string newUser, string newPassword, string newHost)
{
updateExistingSection(doc, rootNode, CREDENTIALS_SECTION_TAG,
createCredentialsSection,
() => new[] {
createNode(USER_TAG, doc, newUser),
createNode(PASSWORD_TAG, doc, newPassword),
createNode(HOST_TAG, doc, newHost)
},
credentialsNode =>
{
updateExistingLeafNode(USER_TAG, doc, credentialsNode, newUser);
updateExistingLeafNode(PASSWORD_TAG, doc, credentialsNode,
newPassword);
updateExistingLeafNode(HOST_TAG, doc, credentialsNode, newHost);
});
}
Мой вопрос касается пятого параметра, переданного от updateExistingCredentialsSection
до updateExistingSection
, () => new[] { createNode(USER_TAG, doc, newUser), ... }
.Насколько я понимаю, эти createNode
вызовы не произойдут, если только лямбда-выражение не будет вызвано в updateExistingSection
, верно?Аналогично для вызовов updateExistingLeafNode
в последнем параметре, заданном updateExistingSection
.
Кроме того, с точки зрения дизайна, выглядит ли какой-либо метод смешным?Вы видите способ, которым я мог бы сделать любой метод меньшим, или потребовать меньше параметров?Я пытался высушить вещи, что и привело к написанию updateExistingSection
, так как у меня было несколько методов, выполняющих одинаковую функциональность.