C# 从共享多个元素的元素构建XML的最佳方法是什么?
注:我读过,但并不完全是我想要的: 我有一个应用程序,可以从输入文件构建XML,并根据所选文件创建两个输出中的一个。这是一款快速而肮脏的应用程序,可以解决眼前的问题,但我知道它会得到进一步的使用,并希望通过重构来抢占先机 目前,我有一个builder类,它在其ctor中接受输入并公开一个属性,该属性是必需的XElement。但是,对于我的两个XML输出,除了内容之外,许多元素都是相同的。哦,请忽略我将单独重构的验证部分 因此,我正在寻找一种干燥我的应用程序的合理方法: 现在我有这样的东西C# 从共享多个元素的元素构建XML的最佳方法是什么?,c#,refactoring,xelement,C#,Refactoring,Xelement,注:我读过,但并不完全是我想要的: 我有一个应用程序,可以从输入文件构建XML,并根据所选文件创建两个输出中的一个。这是一款快速而肮脏的应用程序,可以解决眼前的问题,但我知道它会得到进一步的使用,并希望通过重构来抢占先机 目前,我有一个builder类,它在其ctor中接受输入并公开一个属性,该属性是必需的XElement。但是,对于我的两个XML输出,除了内容之外,许多元素都是相同的。哦,请忽略我将单独重构的验证部分 因此,我正在寻找一种干燥我的应用程序的合理方法: 现在我有这样的东西 pub
public FirstBuilder(string line, int lineNumber, bool output, string subjectType, string inquiryCode)
{
var split = Regex.Split(line, @"\|");
if (split.Count() != SPLIT_COUNT)
throw new Exception("This does not appear to be a valid First Type input file.");
_lineNumber = lineNumber;
_reportId = output ? TXT_REPORT_ID : XML_REPORT_ID;
_subjectType = subjectType;
_responseType = output ? TXT_RESPONSE_TYPE : XML_REPONSE_TYPE;
_inquiryCode = inquiryCode;
_product = split[0];
_number = split[1];
_amount = split[2];
_currency = split[3];
_name = split[4];
_nationalId = split[5];
_gender = split[6];
_dateOfBirth = split[7];
_nationality = split[8];
}
public XElement RequestElement
{
get
{
return new XElement("REQUEST",
new XAttribute("REQUEST_ID", _lineNumber),
RequestParametersElement,
SearchParametersElement);
}
}
private XElement RequestParametersElement
{
get
{
return new XElement("REQUEST_PARAMETERS",
ReportParametersElement,
InquiryPurposeElement,
ApplicationElement);
}
}
private XElement ReportParametersElement
{
get
{
return new XElement("REPORT_PARAMETERS",
new XAttribute("REPORT_ID", _reportId),
new XAttribute("SUBJECT_TYPE", _subjectType),
new XAttribute("RESPONSE_TYPE", _responseType));
}
}
etc. etc...
//used by
var x = new FirstBuilder(x,y,z,etc.).RequestElement();
这一切都很有效,而且速度非常快……但是SecondBuilder也使用这些相同的元素,以及一些不同的元素
因此,我正在寻找重构这些功能的最佳方法:
与继承共享抽象类?
共享助手类?
返回生成元素的扩展方法?
扩展XElement的每个元素的类
我的怀疑是,在下个月,这将从两个例子中迅速膨胀到30个左右
THX.我会将私有属性重构为接收所需值作为输入参数的方法。然后,您可以将它们移动到PartsBuilder类中,并在混凝土构建器中使用该类。Thx-构建器的想法是一种很好的方法吗?不确定还有什么替代方案,这似乎很有效。@BlueChippy:是的,我想没问题。它封装了这种逻辑。