Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 我应该创建多少DTO?_Wcf_C# 4.0_Dto - Fatal编程技术网

Wcf 我应该创建多少DTO?

Wcf 我应该创建多少DTO?,wcf,c#-4.0,dto,Wcf,C# 4.0,Dto,我在返回DTO的地方得到了一些服务, 现在我可以为不同的方法重用相同的DTO 假设我有以下界面: List<ProductDTO> GetProductsByReseller(int reseller) List<ProductDTO> GetProductsByManufacturer(int Manufacturer) List<ProductDTO> GetProductsByCategory(int Category) 现在我有一些其他方法,例如:

我在返回DTO的地方得到了一些服务, 现在我可以为不同的方法重用相同的DTO

假设我有以下界面:

List<ProductDTO> GetProductsByReseller(int reseller)
List<ProductDTO> GetProductsByManufacturer(int Manufacturer)
List<ProductDTO> GetProductsByCategory(int Category)
现在我有一些其他方法,例如:

List<ProductDTO> GetProductsWithAdminInfoByCategory(int Category)
重用现有DTO并简单地扩展它可以吗? 或者我应该创建一个新的DTO,因为某些字段永远不会从该方法中使用

我的想法是:如果只有1或2个字段是新的(在其他情况下从未使用过),也许这是可以的,因为我不必创建重复的DTO,维护2个DTO而不是1的tradeof也可以。如果我从ProductDTO派生一个AdminProductDTO可能会更好,但我不知道继承是否对DTO有效

我错了吗? 从何时开始创建新的DTO,什么是好的treshold值(更改的nbr)

更新: 如果我在WCF中公开一个服务,该服务将公开ProductDTO,那么如果KnownDefects和InsTockAsin属性未设置或为null,它是否必须传输它们? 或者WCF是否足够聪明,根本不需要传输未定义/空属性?(在这种情况下,我不介意只有一个DTO和两个不总是使用的属性。)

另一个更新: 如果我从ProductDTO继承ProductAdminDTO,我仍然可以使用它调用以下服务(它只接受ProductDTO)吗


好吧,我想我可以自己尝试一下,稍后会更新:)

好吧,看来您陷入了经典继承与组合的问题

思考是否使用AdminInfo生产“ISA”产品? 我认为这不能满足我们的关系。额外的管理员信息只是产品的另一个属性


所以这里的构图似乎是个不错的选择。ProductWithAdminInfoDTO包含ProductDTO和AdminInfoDTo

所以您认为继承DTO是有效的,对吗?好吧,我会很快更新我的问题,让我的一个问题更加明显。我发现你的答案没有达到我想要的方向如果有你想要的方向,就去做吧。使用您的直觉:)将您的答案标记为即使我仍然不确定,我可以通过为ParentDTO签订服务合同将InheritedTo传递给服务。有很多解决方案。继承,组合,元组,任何你认为最适合你的东西。如果继承没有问题,我将简单地继承DTO,这样我就不必担心调用doSomethingWiththeTo方法。将很快更新我的问题。我刚从一个好人那里得到信息:“从wcf的角度来看,您的数据契约是消息结构定义,而不是内存中的对象,我认为这可能是不可能的。”这正是我所担心的!我注意到,我只在没有遍历WCF时才使用“扩展”DTO,因此我没有用[DataMember]属性标记它。所以我真的不在乎。:)
List<ProductDTO> GetProductsWithAdminInfoByCategory(int Category)
     #region only for admin
     public int KnownDefects { get; set; }
     public DateTime InStockSince { get; set; }   
     #endregion //only for admin
bool SaveProduct(ProductDTO)