Wcf 我应该创建多少DTO?
我在返回DTO的地方得到了一些服务, 现在我可以为不同的方法重用相同的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) 现在我有一些其他方法,例如:
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)