Saat ini saya bekerja sebagai pengembang solo di proyek saya saat ini. Saya mewarisi proyek dari pengembang lain, yang sejak itu meninggalkan perusahaan. Ini adalah aplikasi web gaya model-view-controller di C #. Ini menggunakan Kerangka Entitas untuk pemetaan relasional objek. Dan ada dua set kelas yang berbeda untuk tipe dalam model domain. Satu set digunakan untuk berinteraksi dengan ORM dan yang lainnya digunakan sebagai model dalam sistem MVC. Misalnya, mungkin ada dua kelas sebagai berikut:
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
dan
public class OrderModel{
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
public OrderModel( Order from){
this.Customer= from.Customer;
// copy all the properties over individually
}
public Order ToOrder(){
Order result =new Order();
result.Customer = this.Customer;
// copy all the properties over individually
}
}
Saya dapat memikirkan beberapa kelemahan dari pendekatan ini (lebih banyak tempat untuk mengubah kode jika ada perubahan, lebih banyak objek duduk dalam memori, lebih banyak waktu dihabiskan untuk menyalin data), tetapi saya tidak begitu yakin apa kelebihannya di sini. Lebih fleksibel untuk kelas model, saya kira? Tapi saya bisa mendapatkannya dengan mensubklasifikasikan kelas entitas juga. Kecenderungan saya adalah untuk menggabungkan dua kelompok kelas ini, atau mungkin model kelas menjadi subclass dari kelas entitas. Jadi, apakah saya kehilangan sesuatu yang penting di sini? Apakah ini pola desain umum yang tidak saya ketahui? Adakah alasan bagus untuk tidak melanjutkan dengan refactor yang saya renungkan?
MEMPERBARUI
Beberapa jawaban di sini membuat saya sadar bahwa deskripsi awal saya tentang proyek itu kurang beberapa detail penting. Ada juga kelompok kelas ketiga yang ada di proyek: kelas model halaman. Merekalah yang sebenarnya digunakan sebagai model yang mendukung halaman. Mereka juga mengandung informasi yang khusus untuk UI, dan tidak akan disimpan dengan pesanan dalam database. Kelas model halaman contoh mungkin:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
Saya benar-benar melihat kegunaan kelompok ketiga ini berbeda di sini, dan tidak punya rencana untuk menggabungkannya dengan sesuatu yang lain (walaupun saya mungkin akan mengganti nama).
Kelas-kelas dalam kelompok model juga saat ini digunakan oleh API aplikasi, yang saya juga akan tertarik mendengar masukan tentang apakah itu ide yang bagus.
Saya juga harus menyebutkan bahwa pelanggan yang direpresentasikan sebagai string di sini adalah untuk menyederhanakan contoh, bukan karena itu sebenarnya diwakili seperti itu dalam sistem. Sistem yang sebenarnya menjadikan pelanggan sebagai tipe berbeda dalam model domain, dengan propertinya sendiri