Примечание: я прочитал это , и это не совсем то, что я ищу:
У меня есть приложение, которое создает XML из вводафайл и создает один из двух выходных данных, в зависимости от выбранного файла.Это было «быстрое грязное» приложение, чтобы обойти насущную проблему, но я знаю, что оно найдет дальнейшее применение и хочу упредить это путем рефакторинга.
На данный момент у меня есть «строитель»класс, который принимает входные данные (в своем ctor) и предоставляет свойство, которое является обязательным XElement.Тем не менее, многие из XElements идентичны, за исключением содержимого, для обоих моих выводов 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
также использует те же самые элементы, наряду с некоторыми другими.
Так что я смотрю на "лучшие"способ их реорганизовать: общий класс Abstract с наследованием?Общие "вспомогательные" занятия?Методы расширения для возврата «встроенных» элементов?Классы на элемент, которые расширяют XElement?
Я подозреваю, что из двух примеров это быстро вырастет до 30 в следующем месяце!
THX.