【发布时间】:2023-04-10 10:20:01
【问题描述】:
我正在编写 WCF 服务以从 Active Directory 返回有关人员的信息。除了返回此人的详细信息,我还希望它返回其经理的用户名和全名。
我开始将其编码为:...
[DataContract]
public class ADPerson
{
Guid objectGuid;
Guid managerObjectGuid;
string username;
string displayname;
[DataMember]
public string Username
{
get { return this.username; }
set { this.username = value; }
}
[DataMember]
public string DisplayName
{
get { return this.displayName; }
set { this.displayName = value; }
}
[DataMember]
public ADPerson Manager
{
get { return new ADPerson(this.managerObjectGuid); }
set { this.managerObjectGuid = value.objectGuid; }
}
/* ... */
}
...但后来意识到这没有停止条件;即,它将一直遍历对象图,直到到达未定义经理的用户(即 CEO)。
有没有一种很好的方法来设置这个停止条件,同时仍然能够重用 ADPerson 类,或者我是否需要提供另一种获取经理详细信息的方法(例如,将我希望显示的那些详细信息放入他们自己的字段并从 Manager 属性中删除 DataMember,或者创建一个 ADManager 类来呈现不是经理的经理的 ADPerson 字段的子集?
这是解决问题很简单的另一种情况,但知道问题的最佳解决方案是什么让我很烦恼。
提前致谢,
JB
【问题讨论】:
-
包括所有最高层的经理并不是最糟糕的包含模式。它应该产生可接受的数字。
-
没错,在最坏的情况下,深度可能只有 20 人左右,但我喜欢保持相对紧凑(即,将 80% 的内容作为冗余信息返回并不理想 - 我'如果可能的话,宁愿只有被请求的员工和他们的经理)。
标签: c# wcf hierarchical-data datacontract datamember