Этот вопрос может лучше подойдет для codereview.stackexchange, хотя, возможно, это слишком маленький фрагмент кода и неясный вопрос для этого.
Лично я уклоняюсь от магических свойств, которые действуют удивительным образом. Это имеет тенденцию делать для API, которые могут быть трудны в использовании, потому что они удивительны, даже если они как-то «умны» под капотом. У вас есть свойство, в котором вы устанавливаете значение, отличное от того, которое вы получаете. Единственное, что может сломать это оператор +=
, который неожиданно сработает очень странным образом с вашим свойством Content
.
Я бы, наверное, пошел с чем-то вроде
public class Article
{
private string content;
private string renderedContent;
public string Headline { get; set; }
public string Content
{
get { return content; }
set
{
content = value;
renderedContent = null; // reset cached rendered content
}
}
public string RenderedContent
{
get
{
if (renderedContent == null)
{
renderedContent = new Markdown().Transform(content);
}
return renderedContent;
}
}
public DateTime Published { get; set; } = DateTime.Now;
}
Что касается того, использовать ли полевые свойства, или авто-свойства, или вычисленные свойства ... вам решать, что делать с этим свойством. Авто-свойства хороши для простого хранения и извлечения значения, например, Published
или Headline
здесь. Вам нужно явное поле поддержки, как только вы сделаете что-то большее, чем просто чтение или запись в геттер и сеттер, как показано здесь в Content
. RenderedContent
может быть просто вычисляемым свойством, но я решил кэшировать значение после первоначального преобразования, потому что вы делаете то же самое. Этот паттерн здесь не конвертирует уценку, пока он не понадобится.