我有一个到 .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 来说它又有点过于笼统,不能成为一个问题。如果有必要,我愿意接受有关如何改进问题的建议。