DataSets与DataClasses作为WCF服务的返回类型

本文关键字:服务 返回类型 WCF 作为 DataClasses DataSets | 更新日期: 2023-09-27 18:21:23

我需要通过WCF服务将信息从BL层路径传递到表示层。

我想通过数据集来实现,但我看到人们认为这是一种糟糕的做法,建议使用数据类。

有人能解释一下区别和优点吗。

谢谢你的帮助。

DataSets与DataClasses作为WCF服务的返回类型

DataSet是一个老派,过时了,就像OR/M解决方案一样,它在拖动&放弃发展

一旦您想通过使用WCF或任何其他框架的服务公开一些逻辑,就需要考虑到这些逻辑不应该传输无用的数据,而应该只传输客户端需要使用的数据,并且客户端可以是用户界面,或者只是另一个服务或后端引擎。

在像WCF这样的服务中,最好的方法是DTO数据传输对象,也称为值对象

将DTO视为一个类,它具有某些使用者在使用服务层时所需的确切数量的属性。

实际示例:您有一个Person类,该类具有Name、SecondName和Age。在您的用户界面中,您需要查询一些服务以获得人员的列表,并且只需要显示SecondName。在这种情况下,您将设计一个具有单个属性SecondName的类,并且您将避免通过服务层向用户界面提供完整的Person,因为它更便宜,而且显然是最优的。

如果此服务层将PersonDto对象返回,则包含3个人的JSON序列化列表将为[{ "SecondName": "Blah" }, { "SecondName": "Bleh" }, { "SecondName": "Blih" }]。我不认为数据集是那种轻松的序列化。

查看这些关于DTO:的文章

  • http://en.wikipedia.org/wiki/Data_transfer_object
  • http://msdn.microsoft.com/en-us/library/ff649585.aspx

我在这里写了关于的博客

试试看-WCF服务应该是独立于平台的,而DataSet不是。您传输的不是带有数据集的已定义文档,而是.NET特定对象的内部表示形式。

尝试一下——数据集有很多糟糕的功能,需要以XML形式表示(更改信息等),但这在设计正确的API(web服务就是这样)中是完全无关的。

试试看——在过去的10年里,我所认识的任何一个我认为不是大三学生的项目都没有数据集,无论WCF与否。许多年前,大多数有知识的人都求助于OR映射器。

使用非类型化数据集,您无法真正塑造传递给客户端的数据,包括表示层。对于内部api来说,这不是什么问题,但如果你计划扩大api的使用,你应该考虑使用静态类型的模型而不是广泛的数据容器的好处。这对输入和输出都很重要。使用类型化模型,您可以更好地定义数据的预期形状、行为,使用共享合同,您可以利用共享验证模型。