【发布时间】:2015-12-19 05:25:02
【问题描述】:
我有以下问题:
我想要以下物品:
- 几个 DTO,例如。 G。为员工、客户等提供服务。
- 多个用户控件,每个 DTO 一个(或多个)显示 DTO 内容并提供用户可能对 DTO 所做的修改。
- 这些用户控件的基类提供了一些默认功能。
- 具有 CRUD 操作的标准按钮面板应该适用于我的所有用户控件。
到目前为止我所做的是:
- 我有一个用于 DTO 的抽象基类和几个特殊的 DTO 类。
- 我的默认按钮事件处理程序中有标准功能。例如:保存按钮向用户控件询问当前数据(通过 DTO),将数据传递给某个检查类,如果所有检查都通过,则将数据存储在数据库中。要检索数据,需要通过构造函数设置对客户端对象的引用。
- 我的用户控件有一个基类。这不是抽象的,因为我想得到设计师的支持。因此,此类基于 DTO 的抽象基类,通过虚拟方法提供对其控件的访问/访问。
- 我有一个基于特定 DTO 类型的通用接口,它定义了具有相同方法名称的数据访问。
- 现在我创建一个新的用户控件,继承自我的用户控件基类,并为合适的 DTO 类实现通用接口。因此,BaseDTO GetData() 被 new SpecialDTO GetData() 方法覆盖。
这是我的问题:
- 在我的事件处理程序中,客户端控件是我想要的类型,例如。 G。客户客户端控件。但是调用的方法不是new CustomerDTO CustomerClientControl.GetData(),而是基本的默认实现BaseDTO BaseClientControl.GetData()。
我怎样才能摆脱困境?感谢您提供任何帮助或建议,以使整个构造更美观。
编辑:这是一些代码。
// in my "standard functionality"
BaseClient Client { get; } // or IClientDataAccess<BaseDTO>
void ButtonSave()
{
var data = this.Client.GetData(); // in runtime, this.Client is CustomerClient
// the following works, don't worry. :-)
if (this.CheckLogic.CheckData(data))
{
this.DataAccess.SaveData(data);
}
}
public interface IClientDataAccess<T> where T : BaseDTO
{ T GetData(); }
public BaseClient : UserControl, IClientDataAccess<BaseDTO>
{
public virtual BaseDTO GetData()
{
return new BaseDTO(); // some stupid default
}
}
public CustomerClient : BaseClient, IClientDataAccess<CustomerDTO>
{
public new CustomerDTO GetData()
{
// CustomerDTO : BaseDTO
return new CustomerDTO(this.CustomerNameTextbox);
}
}
【问题讨论】:
-
你能显示调用方法的代码吗?
-
@stuartd:代码示例见上文。谢谢。