私は現在、現在のプロジェクトでソロ開発者として働いています。私は別の開発者からプロジェクトを引き継ぎました。これは、C#のモデルビューコントローラースタイルのWebアプリケーションです。オブジェクトリレーショナルマッピングにEntity Frameworkを使用します。また、ドメインモデルの型には、2つの異なるクラスセットがあります。1つのセットはORMとの対話に使用され、もう1つのセットはMVCシステムのモデルとして使用されます。たとえば、次の2つのクラスがあるとします。
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
そして
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
}
}
このアプローチのいくつかの欠点(何かが変更された場合にコードを変更する場所が増える、メモリ内に存在するオブジェクトが増える、データのコピーに費やす時間が増える)を考えることができますが、ここでの利点はよくわかりません。モデルクラスの柔軟性が増したと思いますか?しかし、エンティティクラスもサブクラス化することで取得できます。私の傾向は、これら2つのクラスグループをマージするか、モデルクラスをエンティティクラスのサブクラスにすることです。ここで重要な何かが欠けていますか?これは私が知らない一般的なデザインパターンですか?私が考えているリファクタリングを行わない理由はありますか?
更新
ここでの回答のいくつかは、プロジェクトの最初の説明に重要な詳細が欠けていたことに気づかせています。プロジェクトには、ページモデルクラスという3つ目のクラスグループもあります。それらは、ページを支えるモデルとして実際に使用されているものです。また、UIに固有の情報も含まれており、注文とともにデータベースに保存されることはありません。ページモデルクラスの例は次のとおりです。
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
この3番目のグループの有用性はここではまったく異なると思いますが、他のものとマージする予定はありません(名前を変更する場合があります)。
モデルグループのクラスは現在、アプリケーションのAPIでも使用されています。これは、それが良いアイデアであるかどうかについての意見を聞くことにも興味があります。
また、ここで文字列として表されているお客様は例を単純化するためのものであり、実際にはシステムでそのように表されているためではありません。実際のシステムでは、独自のプロパティを持つドメインモデルの異なるタイプとして顧客がいます