У меня есть класс, представляющий документ rtf ClsRtfDoc
.
Создание экземпляра объекта ClsRtfDoc
читает файл rtf и сначала анализирует файл rtf для получения различных метаданных файла rtf.
Например, у меня есть поле int paperHeight
, которое я использую для хранения высоты бумаги файла rtf, проанализированной по строке, содержащей содержимое файла rtf.
Поскольку содержимое файла rtf находится в строковой переменной, тип данных свойства PaperHeight
является строкой, а свойство PaperHeight
setter
анализирует высоту бумаги из строкового объекта (например, ищите \paperw12240\paperh15840
и получает 15840 из большого двоичного объекта), преобразует его в целое число и устанавливает в поле paperHeight
целочисленное значение.См. Код ниже.
Я сконструировал код таким образом, потому что хочу изолировать операцию parse + set.Злоупотребляю ли я концепцией установщика свойств, когда тип данных свойства не соответствует типу данных соответствующего поля?Есть ли лучшая практика (шаблон проектирования?), Которую я должен использовать при создании этого кода?
CODE
public partial class ClsRtfDoc
{
int paperHeight;
public string PaperHeight
{
set
{
MatchCollection objPaperHeight = Regex.Matches(value, "(\\\\paperw\\d+)(\\\\paperh\\d*)");
if (objPaperHeight.Count >= 1 && objPaperHeight[0].Groups.Count == 3)
{
if (!(Int32.TryParse((objPaperHeight[0].Groups[2].Value).Replace("\\paperh", ""), out int paperHeightValue)))
{
throw new FormatException("Can't find paper height");
}
else
{
paperHeight = paperHeightValue;
}
}
else
{
throw new FormatException("Can't find paper height");
}
}
}
// CTOR
public ClsRtfDoc(string fqFRtfFileName)
{
string rtfTextFromFile = GetRtfFromFile(fqFRtfFileName);
PaperHeight = rtfTextFromFile;
}
}