.NET サービス層へのインターフェイスがあり、Web サービスを介してサードパーティ システムと通信します。これは、サードパーティ システムの機能に関連する多くのさまざまなタスクを処理します (実際には特注の CRM システムですが、コンテキストは関係ないので、これを簡単なものに置き換えます)。
インターフェイスは次のようになります。
public interface IMyService
{
CarModel GetCar(string registration);
CarModel AddCar(Car car);
PersonModel GetPerson(string personId);
PersonModel AddPerson(Person person);
}
現在、私のモデルは次のように機能していBaseResponseModel
ますSomethingModel
。それぞれにいくつかの基本的なプロパティが含まれ、次のようSomethingModel
に - もラップされます。Something
基本応答モデル
public class BaseResponseModel
{
public List<string> Errors { get; set; }
public bool HasErrors
{
get
{
return (Errors != null && Errors.Count > 0);
}
}
}
特定の応答モデル
public class CarModel : BaseResponseModel
{
public Car Car { get; set; }
}
public class PersonModel : BaseResponseModel
{
public Person Person { get; set; }
}
ここではCar
、Person
単純に一連のパブリック プロパティが含まれています。次に、my の各メソッドはIMyService
引数を受け取り、.asmx Web サービスへの要求をフォーマットし、応答を解析して応答モデルに変換し、それを呼び出し元に返します (.ascx 分離コード)。
ただし、さまざまな...Model
クラスの数 (ラップされたオブジェクトのプロパティ名がすべて異なることは言うまでもありません) は見苦しくなっていきます。私は次の方針に沿って何かをするつもりです:
public class Car
{
public string Registration { get; set; }
}
public class ServiceResponse<T>
{
public List<string> Errors { get; set; }
public bool HasErrors { ... }
public T Result { get; set; }
}
public interface IMyService
{
ServiceResponse<Car> GetCar(string registration);
ServiceResponse<Car> AddCar(Car car);
ServiceResponse<Person> GetPerson(string id);
ServiceResponse<Person> AddPerson(Person person);
}
私の ASP.NET コントロールは、ServiceResponse<T>
のすべてのメソッドから受信しIMyService
ます。
これは、C# でのジェネリックの "従来どおりの" 使用法ですか? それとも、これは私のソリューションでより深いアーキテクチャの欠陥を隠しているだけですか? 私の提案したソリューションに欠けているものはありGet
ますAdd
か?
免責事項: この質問が「あまりにも主観的」である場合は申し訳ありませんが、Programmers.SE の理論的な質問であるには具体的すぎ、CodeReview.SE の質問であるには一般的すぎるようです。必要に応じて、質問を改善する方法についての提案をお待ちしています。