【发布时间】:2017-02-19 22:22:45
【问题描述】:
我的数据访问层我想使用 DTO 并确保所有网关(表数据网关)都将实现返回特定于给定网关的某些 DTO 列表的方法。 为了实现这一点,我创建了这样的 empty 界面
public interface IDataTransferObject{}
所有 DTO 都像这样实现了这个接口
public class UserAccountTypeDTO : IDataTransferObject
{
public int Id { get; set; }
public int AccountTitle { get; set; }
public int CreditTypeId { get; set; }
public bool Active { get; set; }
}
然后我为我的所有网关制作了通用接口
public interface IDefaultGateway<D> where D:IDataTransferObject
{
List<D> Read(SqlDataReader sqlReader);
}
最后通过我的网关实现了 IDefaultGateway
class UserAccountTypeGW : IDefaultGateway<UserAccountTypeDTO>
{
private const string Table = " UserAccountType ";
private string SelectAll = "select * from" + Table + "";
private string SelectById = ...;
public List<UserAccountTypeDTO> Read(SqlDataReader sqlReader)
{
throw new NotImplementedException();
}
}
是否可以创建空接口只是为了以某种方式将类组合在一起,即使它们不共享任何行为?
网关中的字段是相同的,只是它的值在变化。我确实将字段复制并粘贴到每个网关,我想知道是否有更快/更懒的方法来做到这一点。
- 接口和字段不是朋友,因此它可以被定义为属性。由于需要在每个 DTO 中创建构造函数来初始化属性并将 set 设为私有,因此结果比我所做的要差一些。
- 抽象类与接口几乎相同
- 在这种情况下,创建基类、定义字段和方法并在网关构造函数中初始化(或覆盖)它们更好,或者与我所做的几乎相同?
【问题讨论】:
-
为什么所有类都需要共享相同的方法和字段?什么代码会使用
IDataTransferObject或IDefaultGateway<D>?似乎它们的存在只是为了提醒程序员遵循代码中的特定模式,但实际上没有人会通过您描述的接口或基类来使用它们。 -
是的,他们在那里只是为了提醒我不要忘记那个方法。