Saya memiliki kelas C # yang mewakili jenis konten dalam sistem manajemen konten web.
Kami memiliki bidang yang memungkinkan editor konten web untuk memasukkan template HTML untuk bagaimana objek ditampilkan. Ini pada dasarnya menggunakan sintaks setang untuk menggantikan nilai properti objek ke dalam string HTML:
<h1>{{Title}}</h1><p>{{Message}}</p>
Dari perspektif desain kelas, haruskah saya mengekspos string HTML yang diformat (dengan substitusi) sebagai properti atau metode ?
Contoh sebagai properti:
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.
}
}
Contoh sebagai metode:
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.
}
}
Saya tidak yakin dari sudut pandang desain apakah ada bedanya atau ada alasan mengapa satu pendekatan lebih baik dari yang lain?
c#
design-patterns
class-design
methods
properties
Charles Wesley
sumber
sumber
Jawaban:
UPDATE: Pertanyaan ini adalah topik blog saya pada Mei 2014 . Terima kasih atas pertanyaannya!
Untuk menambah jawaban Robert Harvey : properti harus:
secara logis properti kelas, cara yang mengatakan warna atau tahun atau modelnya adalah properti mobil.
tidak lebih dari, katakanlah, sepuluh kali lebih lambat untuk menghitung daripada mengambil dari bidang.
sesuatu yang Anda tidak keberatan dihitung saat debugging. VS debugger secara otomatis menghitung properti.
tidak bisa gagal. Getters harus selalu mengembalikan nilai tidak peduli apa status objek tersebut.
Saya tidak berpikir
Html
properti yang Anda usulkan akan terkena semua itu. Jangan menjadikannya properti kecuali itu mengenai mereka semua .sumber
ToHtml
benar metode, seperti yang Anda tulis dalam kedua kasus. Buka saja di depan umum.Knerd membuat poin yang bagus: properti dapat diserialisasi. Anda tidak akan pernah menghilangkan bakteri dari HTML, jadi tidak masuk akal untuk menjadikannya properti dari perspektif itu.
Konsisten dengan cara ORM dan objek repositori bekerja: bidang dalam rekaman atau tupel diwakili dengan properti, tetapi Anda mengambil catatan (atau beberapa bentuknya ) menggunakan metode.
sumber