Bir özellik veya yöntem olarak "hesaplanan" değeri göstermeli miyim?


13

Bir web içerik yönetim sisteminde bir içerik türünü temsil eden bir C # sınıfı var.

Web içerik düzenleyicisinin, nesnenin nasıl görüntülendiğine ilişkin bir HTML şablonu girmesine izin veren bir alanımız var. Temel olarak nesne özellik değerlerini HTML dizesine koymak için gidon sözdizimini kullanır:

<h1>{{Title}}</h1><p>{{Message}}</p>

Sınıf tasarımı açısından, biçimlendirilmiş HTML dizesini (ikame ile) bir özellik veya yöntem olarak göstermeli miyim?

Özellik olarak örnek:

public class Example
{
  private string _template;
  public string Title { get; set; }
  public string Message { get; set; }
  public string Html 
  {
    get
    {
      return this.ToHtml();
    }
    protected set { }
  }

  public Example(Content content)
  {
    this.Title = content.GetValue("title") as string;
    this.Message = content.GetValue("message") as string;
    _template = content.GetValue("template") as string;
  }

  private string ToHtml()
  {
    // Perform substitution and return formatted string.
  }  
}

Yöntem olarak örnek:

public class Example
{
  private string _template;
  public string Title { get; set; }
  public string Message { get; set; }

  public Example(Content content)
  {
    this.Title = content.GetValue("title") as string;
    this.Message = content.GetValue("message") as string;
    _template = content.GetValue("template") as string;
  }

  public string ToHtml()
  {
    // Perform substitution and return formatted string.
  }  
}

Tasarım açısından bir fark yaratıyor mu yoksa bir yaklaşımın diğerinden daha iyi olmasının nedenleri var mı?


Özelliklerin avantajı, XML veya JSOn olarak serileştirilir, ancak bence.
Knerd

1
Özellikler, durum bilgisini temsil etmelidir. Hesaplanıp hesaplanmadıkları önemli değildir. İfadelerde kullanılmasını kolaylaştırır. HTML'nin nesnenin durumunu temsil edip etmediğini yalnızca siz bilirsiniz.
Reactgular

Yanıtlar:


18

GÜNCELLEME: Bu soru Mayıs 2014'teki blogumun konusuydu . Bu mükemmel soru için teşekkürler!


Robert Harvey'nin cevabına eklemek için : bir mülk şöyle olmalıdır:

  • mantıksal olarak sınıfın bir özelliği , rengini veya yılını veya modelini söyleme yolu bir arabanın özellikleridir.

  • diyelim ki, hesaplamak bir alandan getirmekten on kat daha yavaş.

  • hata ayıklama sırasında hesaplanması sakıncası olmayan bir şey. VS hata ayıklayıcı otomatik olarak özellikleri hesaplar.

  • başarısız olamaz. Harfler, nesnenin durumu ne olursa olsun her zaman bir değer döndürmelidir.

Önerilen Htmlmülkünüzün bunlardan herhangi birine çarptığını düşünmüyorum . Hepsini vurmadığı sürece mülk yapmayın .


"başarısız olamaz. Nesnenin durumu ne olursa olsun, harfler her zaman bir değer döndürmelidir." Mülkler, nesneleri atıldıktan sonra bir istisna atmamalı mı?
Stephen

6

ToHtmlher iki durumda da yazdığınız gibi doğru bir yöntemdir. Sadece herkese açık olarak gösterin.

Knerd iyi bir noktaya işaret eder: özellikler serileştirilebilir. Asla HTML'den serileştirmezsiniz, bu yüzden onu bu açıdan bir özellik haline getirmek pek mantıklı değildir.

ORM'lerin ve havuz nesnelerinin çalışma şekliyle tutarlı olarak: bir kayıttaki veya gruptaki alanlar özelliklerle temsil edilir, ancak bir yöntem kullanarak kaydı (veya bir biçimini ) alırsınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.