Ada sebagian basis kode kami yang ditulis dengan gaya berikut:
// IScheduledTask.cs
public interface IScheduledTask
{
string TaskName { get; set; }
int TaskPriority { get; set; }
List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein
}
// ScheduledTaskImpl.cs
public class ScheduledTaskImpl : IScheduledTask
{
public string TaskName { get; set; }
public int TaskPriority { get; set; }
public List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein,
// perhaps a constructor or two for convenience.
}
Yaitu, ada sejumlah besar antarmuka yang menetapkan hanya satu set properti tanpa perilaku masing-masing dengan satu-satunya implementasi yang sesuai yang mengimplementasikannya dengan properti-otomatis. Kode ini ditulis oleh seseorang yang cukup senior (lebih dari saya) dan terlepas dari penggunaan antarmuka ini, kode prosedural yang masuk akal. Saya bertanya-tanya apakah ada orang lain yang mengalami / menggunakan gaya ini dan apakah itu memiliki kelebihan dibandingkan hanya menggunakan DTO beton di mana-mana tanpa antarmuka.
Jawaban:
Inilah dua sen saya:
ScheduledTask
,ScheduledJob
,ScheduledEvent
,ScheduledInspection
, dll, harus hanya satu dipisahkanSchedulable
antarmuka membuat setiap implementor schedulable.TaxSheet
dapat berubahSessionAwareTaxSheet
karena perbaikan yang signifikan dibuat tetapi antarmukaITaxSheet
mungkin tidak akan diganti nama dengan mudah.Intinya:
sumber
Masalah khusus yang saya lihat dengan DTO yang menggunakan antarmuka adalah memungkinkannya:
Saya telah melihat pola ini diterapkan sebagai peretasan cepat dan kotor untuk menerapkan beberapa perilaku kritis. Ini mengarah ke kode yang dapat memiliki perilaku yang sangat membingungkan:
Hal ini sulit untuk dipertahankan dan membingungkan untuk dicoba dilepaskan atau diolah. IMO, menambahkan perilaku ke DTO melanggar prinsip tanggung jawab tunggal. Tujuan dari DTO adalah untuk merepresentasikan data dalam format yang dapat dipertahankan dan diisi oleh kerangka persistensi.
DTO bukan model domain. Kita seharusnya tidak khawatir jika DTO anemia. Mengutip diskusi Martin Fowler tentang model domain anemik :
sumber