C# 从共享多个元素的元素构建XML的最佳方法是什么?

C# 从共享多个元素的元素构建XML的最佳方法是什么?,c#,refactoring,xelement,C#,Refactoring,Xelement,注:我读过,但并不完全是我想要的: 我有一个应用程序,可以从输入文件构建XML,并根据所选文件创建两个输出中的一个。这是一款快速而肮脏的应用程序,可以解决眼前的问题,但我知道它会得到进一步的使用,并希望通过重构来抢占先机 目前,我有一个builder类,它在其ctor中接受输入并公开一个属性,该属性是必需的XElement。但是,对于我的两个XML输出,除了内容之外,许多元素都是相同的。哦,请忽略我将单独重构的验证部分 因此,我正在寻找一种干燥我的应用程序的合理方法: 现在我有这样的东西 pub

注:我读过,但并不完全是我想要的:

我有一个应用程序,可以从输入文件构建XML,并根据所选文件创建两个输出中的一个。这是一款快速而肮脏的应用程序,可以解决眼前的问题,但我知道它会得到进一步的使用,并希望通过重构来抢占先机

目前,我有一个builder类,它在其ctor中接受输入并公开一个属性,该属性是必需的XElement。但是,对于我的两个XML输出,除了内容之外,许多元素都是相同的。哦,请忽略我将单独重构的验证部分

因此,我正在寻找一种干燥我的应用程序的合理方法:

现在我有这样的东西

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:是的,我想没问题。它封装了这种逻辑。