I have the following methods:
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);
});
}
My question concerns the fifth parameter passed in updateExistingCredentialsSection
to updateExistingSection
, the () => new[] { createNode(USER_TAG, doc, newUser), ... }
one. It was my understanding that those createNode
calls will not occur unless that lambda expression is called in updateExistingSection
, right? Likewise for the updateExistingLeafNode
calls in the last parameter given to updateExistingSection
.
Also, from a design perspective, does either method look ridiculous? Do you see a way I could make either method smaller, or require fewer parameters? I've been trying to DRY things out, which is what led to writing updateExistingSection
in the first place, since I had several methods doing the same functionality.