是否可以给出不同类别的视图。例如,我有帐户类,我想公开这个数据使用WCF。对于不同的方法调用,我希望公开不同的帐户类的属性。假设特定的调用我想只公开用户名和密码,为 另一个电话我想公开电子邮件和地址。如果我必须写不同的类或 我可以在需要的财产暴露在客户端公开类别的不同视图
回答
你可以做到这一点使用接口“意见”。例如,使用方法或属性创建一个UsernamePassword接口来访问用户名和密码,并让Account类实现这个接口。然后你可以传递这个接口,并且它的用户不会意识到帐户类中的其他方法和属性。
interface IUsernamePassword
{
string Username { get; set; }
string Password { get; set; }
}
class Account : IUsernamePassword
{
public string Username { get; set; }
public string Password { get; set; }
}
注意这里也有WCF,它可以影响事物;此外,调用者可能抛弃界面也可能无关紧要。 – 2010-12-21 08:18:56
您可以使用具有DataMember属性的DataContract,但它允许您只生成一个类的序列化视图。您可能需要创建较小的ViewModel类,可能使用AutoMapper为您处理所有映射代码。
如果一个用法是WCF和另一使用内置于您的应用程序,那么你就可以适当地[DataMember]
使得只有期望的特性暴露注释类。如果您有两个不同的WCF场景,那么我会引入一个新的类(或多个类)来表示每组返回数据,可能会添加一个隐含的conversion operator(从实体到DTO),以便您可以执行:
public CustomerLite GetCustomer(int id) {
Customer cust = SomeTier.GetCustomer(id);
return cust; // note cust is Customer but we are returning CustomerLite
}
如果要公开同Account
类的多个视图,答案是否定的(即我所知道的)。使用默认的DataContractSerializer
,您可以控制哪些成员仅以声明方式呈现给用户。这将允许您以一种方式自定义用户的视图,但不能以倍数。
相反,您可以创建一个单独的数据合同类(可能需要Account
作为构造函数参数),以便为每个您希望公开的“视图”创建。
永远,永远,使用被你的应用程序域之外的任何托管服务时,总是使用消息类(又名DTO)。
我用在我的WCF所有演示,说明邮件类别!=业务类幻灯片,但我既然找到了一个更好的方式来解释它。
这不是星际旅行的人。 You Can't Fax a Cat(一张图片胜过1000字)。
- 1. 如何在视图中公开不同的过滤器
- 2. 子类的不同视图
- 3. 从不同的视图控制器打开相同的视图
- 4. 可以在SharePoint中创建针对不同用户类别的不同视图?
- 5. 不同类别
- 6. 不同类别
- 7. 缩略图类别的不同样式
- 8. iPad。 UIBarButtonItem有一个UIToolbarTextButton类型的未公开的视图。咦?
- 9. 不同级别的WPF树视图的样式不同吗?
- 10. html类别/子类别最佳视图
- 11. 不能检索类别列表视图
- 12. 调用公共类中的公共类,从不同的包
- 13. 如何在WCF中将类型公开为不同的名称?
- 14. 通过WCF公开DTO时不同类型的ID
- 15. SQL - 不同类别的列
- 16. 不同类别的GCD
- 17. 类别和子类别在相同或不同的表?
- 18. 多个UIButton打开相同的视图,但不同的内容
- 19. WCF WSDL不公开所需的类
- 20. 不同类别的不同日志级别
- 21. 不同的视图不同的Qt :: CheckStateRole?
- 22. WordPress的 - 输出不同的图像,而不是类别名称
- 23. Excel 2007数据透视表,不同列中的不同公式
- 24. 莲花笔记:从类别名称轮廓打开视图
- 25. BroadcastReceiver类别的开始意图
- 26. 视图无法识别viewmodel中的类
- 27. 明确写作公开而不写作公开有什么区别?
- 28. 不同按钮的不同视图iPhone
- 29. 公开的嵌套类型
- 30. Lucene.Net - 获取不同类别
为什么要调用某些方法时隐藏某些属性?它是将它从程序员还是用户中隐藏起来? – Heki 2010-12-21 08:16:06
@Heki - 从提及[wcf]和[web-services],我们应该推断a **客户端**所需的数据不一定与系统内部需要的数据相同。 – 2010-12-21 08:24:10
你可能是对的,但我觉得有必要提出一个澄清的问题。无论如何,我一定会像你所建议的那样与DTO合作。 – Heki 2010-12-21 09:04:28