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
C# 揭示不同的阶级观_C#_Wcf_Web Services - Fatal编程技术网

C# 揭示不同的阶级观

C# 揭示不同的阶级观,c#,wcf,web-services,C#,Wcf,Web Services,是否可以对一个类给出不同的视图。例如,我有Account类,我希望使用WCF公开此数据。对于不同的方法调用,我想公开Account类的不同属性。假设对于特定调用,我只想公开用户名和密码,例如 另一个电话,我想公开电子邮件和地址。我应该写不同的课程还是不同的课程 我可以将所需的属性公开给客户端您可以使用接口作为“视图”来实现这一点。例如,使用访问用户名和密码的方法或属性创建UsernamePassword接口,并让Account类实现此接口。然后您可以传递这个接口,它的用户将不知道account类

是否可以对一个类给出不同的视图。例如,我有Account类,我希望使用WCF公开此数据。对于不同的方法调用,我想公开Account类的不同属性。假设对于特定调用,我只想公开用户名和密码,例如 另一个电话,我想公开电子邮件和地址。我应该写不同的课程还是不同的课程
我可以将所需的属性公开给客户端

您可以使用接口作为“视图”来实现这一点。例如,使用访问用户名和密码的方法或属性创建UsernamePassword接口,并让Account类实现此接口。然后您可以传递这个接口,它的用户将不知道account类中的其他方法和属性

  interface IUsernamePassword
  {
    string Username { get; set; }
    string Password { get; set; }
  }

  class Account : IUsernamePassword
  {
    public string Username { get; set; }

    public string Password { get; set; }
  }

您可以使用接口作为“视图”来实现这一点。例如,使用访问用户名和密码的方法或属性创建UsernamePassword接口,并让Account类实现此接口。然后您可以传递这个接口,它的用户将不知道account类中的其他方法和属性

  interface IUsernamePassword
  {
    string Username { get; set; }
    string Password { get; set; }
  }

  class Account : IUsernamePassword
  {
    public string Username { get; set; }

    public string Password { get; set; }
  }

您可以使用带有DataMember属性的DataContract,但这只允许您生成一个类的序列化视图。您可能希望创建较小的ViewModel类,可能需要使用AutoMapper来为您处理所有映射代码。

您可以使用带有DataMember属性的DataContract,但这只允许您生成一个类的序列化视图。您可能需要创建更小的ViewModel类,可能需要使用AutoMapper为您处理所有映射代码。

如果一个用法是WCF,而另一个用法是应用程序内部的,那么您可以使用
[DataMember]
对该类进行适当的注释,以便只显示所需的属性。如果您有两个不同的WCF场景,那么我将引入一个(或多个)新类来表示每组返回数据,可能会添加一个隐式(从实体到DTO),这样您就可以:

public CustomerLite GetCustomer(int id) {
    Customer cust = SomeTier.GetCustomer(id);
    return cust; // note cust is Customer but we are returning CustomerLite
}
如果一种用法是WCF,而另一种用法是应用程序内部的,那么您可以使用
[DataMember]
适当地注释该类,以便只显示所需的属性。如果您有两个不同的WCF场景,那么我将引入一个(或多个)新类来表示每组返回数据,可能会添加一个隐式(从实体到DTO),这样您就可以:

public CustomerLite GetCustomer(int id) {
    Customer cust = SomeTier.GetCustomer(id);
    return cust; // note cust is Customer but we are returning CustomerLite
}

如果您想公开同一
帐户
类的多个视图,答案是否定的(我知道)。使用默认的
DataContractSerializer
,您可以控制哪些成员仅以声明方式呈现给用户。这将允许您以一种方式自定义用户的视图,而不是多次自定义


相反,您可以为希望公开的每个“视图”创建一个单独的数据协定类(可能将
帐户
作为构造函数参数)。

如果您想公开同一
帐户
类的多个视图,答案是否定的(我知道)。使用默认的
DataContractSerializer
,您可以控制哪些成员仅以声明方式呈现给用户。这将允许您以一种方式自定义用户的视图,而不是多次自定义


相反,您可以为希望公开的每个“视图”创建一个单独的数据协定类(可能将
帐户
作为构造函数参数)。

在使用应用程序域之外托管的任何服务时,始终始终始终使用消息类(也称DTO)

我以前在所有关于WCF的演示文稿中都会有一张幻灯片,其中说明了消息类!=商业课程,但我找到了更好的解释方法


这不是《星际迷航》的人。(一张图片抵得上1000个单词)。

在使用应用程序域之外托管的任何服务时,始终使用消息类(也称DTO)

我以前在所有关于WCF的演示文稿中都会有一张幻灯片,其中说明了消息类!=商业课程,但我找到了更好的解释方法


这不是《星际迷航》的人。(一张图片抵得上1000个单词)。

为什么在调用某些方法时要隐藏某些属性?它是对程序员还是对用户隐藏的?@Heki-从[wcf]和[web services]的提及中,我们可能会推断,客户需要的数据不一定与系统内部需要的数据相同。你可能是对的,但我觉得有必要问一个澄清的问题。无论如何,我肯定会像你们建议的那个样使用DTO。为什么在调用某些方法时要隐藏某些属性?它是对程序员还是对用户隐藏的?@Heki-从[wcf]和[web services]的提及中,我们可能会推断,客户需要的数据不一定与系统内部需要的数据相同。你可能是对的,但我觉得有必要问一个澄清的问题。无论如何,我一定会像你们建议的那个样使用DTO;另外,调用方是否可以丢弃接口也可能无关紧要;另外,调用方是否可以丢弃接口也可能无关紧要。