Şu anda mevcut projemde solo geliştirici olarak çalışıyorum. Projeyi, şirketten ayrılan başka bir geliştiriciden miras aldım. C # model görünüm denetleyicisi tarzı bir web uygulamasıdır. Nesne ilişkisel eşleme için Entity Framework kullanır. Etki alanı modelindeki türler için iki farklı sınıf kümesi vardır. Bir set ORM ile etkileşim için kullanılır ve diğeri MVC sisteminde model olarak kullanılır. Örneğin, aşağıdaki gibi iki sınıf olabilir:
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
ve
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
}
}
Bu yaklaşımın (bir şey değiştiğinde kodu değiştirmek için daha fazla yer, bellekte oturan daha fazla nesne, verileri kopyalamak için daha fazla zaman harcadığım) birkaç dezavantajı düşünebilirim, ancak burada avantajların ne olduğundan emin değilim. Sanırım model sınıfları için daha fazla esneklik? Ama bunu varlık sınıflarını da alt sınıflandırarak elde edebilirim. Eğilim, bu iki sınıf grubunu birleştirmek ya da model sınıflarının varlık sınıflarının alt sınıfları olmasını sağlamak olabilir. Burada önemli bir şey mi eksik? Bu farkında olmadığım ortak bir tasarım deseni mi? Düşündüğüm refactor ile geçmemek için iyi nedenler var mı?
GÜNCELLEME
Buradaki bazı cevaplar, projeyle ilgili ilk açıklamamın bazı önemli ayrıntıların eksik olduğunu anlamamı sağlıyor. Projede var olan üçüncü bir sınıf grubu da vardır: sayfa modeli sınıfları. Onlar aslında sayfayı destekleyen model olarak kullanılanlardır. Ayrıca, kullanıcı arayüzüne özgü bilgiler içerir ve veritabanında bir siparişle depolanmazlar. Örnek bir sayfa modeli sınıfı şunlar olabilir:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
Bu üçüncü grubun faydasının burada farklı olduğunu tamamen görüyorum ve başka bir şeyle birleştirmeyi planlamıyorum (yeniden adlandırabilirim).
Model grubundaki sınıflar şu anda uygulamanın API'sı tarafından da kullanılıyor, ki bu da iyi bir fikir olup olmadığı konusunda girdi duymakla ilgileniyorum.
Ayrıca burada bir dize olarak temsil edilen müşterinin, aslında sistemde bu şekilde temsil edildiği için değil, örneği basitleştirmek olduğunu belirtmeliyim. Gerçek sistem, müşterinin kendi özelliklerine sahip etki alanı modelinde farklı bir tür olduğunu gösterir.