【发布时间】:2009-04-20 09:04:04
【问题描述】:
我有一个连接到 WCF 服务以实现其业务逻辑的 Web 应用程序。出于性能和互操作性的原因,我想使用简单的 Dto 在 WCF 边界传输数据。
但是我必须使用类型化的数据集进行数据访问(ORM 或任何其他选项由于政治原因不可用)。
将 Dto 与类型化数据集一起使用是个好主意吗?有人做过吗?有推荐的模式吗?最重要的是,是否有一个库/工具/方法可以从类型化的数据集中自动生成 Dto?
【问题讨论】:
我有一个连接到 WCF 服务以实现其业务逻辑的 Web 应用程序。出于性能和互操作性的原因,我想使用简单的 Dto 在 WCF 边界传输数据。
但是我必须使用类型化的数据集进行数据访问(ORM 或任何其他选项由于政治原因不可用)。
将 Dto 与类型化数据集一起使用是个好主意吗?有人做过吗?有推荐的模式吗?最重要的是,是否有一个库/工具/方法可以从类型化的数据集中自动生成 Dto?
【问题讨论】:
想到实体翻译模式。
http://msdn.microsoft.com/en-us/library/cc304747.aspx
好吧,也许是它的变体。
我最近不得不做一些类似的事情,我刚刚创建了另一个“层”,它将存储在数据行/数据表等中的数据转换为数据合同对象。服务层可以使用您的数据访问方法的结果作为参数调用这个新的层方法。
这是一个快速而肮脏的 PSUEDOCODE 示例:
public class personTranslator
{
public static PersonDataContract TranslateToContract(Datarow personDataRow)
{
PersonDataContract resultPerson = new Person;
resultPerson.FirstName = personDataRow["FirstName"];
resultPerson.LastName = personDataRow["LastName"];
.
.
[etc.]
return resultPerson;
}
}
SERVICELAYER 类
public PersonDataContract GetSpecificPerson([Parameters])
{
[other setup/validation code...]
return PersonTranslator.TranslateToContract(PersonDataAccess.GetPersonRow([Parameters]));
}
【讨论】:
我建议使用类型化的 DataRow-s、DataTable-s。类型化的 DataRow 和 Dto 对象之间实际上并没有太大区别。 性能方面,您必须对其进行测试,即普通的 Dto-s 会有所帮助(我对此表示怀疑)。 至于互操作性,类型化的 DataRow-s 是普通类,因此它们与 Dto 对象一样具有互操作性。
【讨论】: