【发布时间】:2012-07-12 03:53:06
【问题描述】:
我正在设计一个数据驱动的 Windows 应用程序,它不是由底层 SQL Server 而是由 WCF 服务提供的,以便允许本地和远程访问。
所述 WCF 为检索用户、库存、客户等提供特定功能,并实际执行 ADO 操作,大致如下:
[OperationContract]
UserAdapter GetUserByWindowsIdentity(string Domain, string Account);
返回以下之一:
[DataContract]
public class UserAdapter
{
[DataMember]
public int? ID;
[DataMember]
public string Domain;
[DataMember]
public string Account;
[DataMember]
public string Name;
}
我不想在我的 WPF 前端应用程序中具体引用我的 WCF 客户端,我想在其间的另一层抽象一些进一步的功能 - 例如,通过其 WindowsIdentity 验证用户登录既不属于数据层,也不是表示层,而是中间业务逻辑层。
我不确定该怎么做。我希望在我的表示层中能够执行以下操作:
User.Login();
根据我的 UserAdapter 类,让 User 对象抽象出域、帐户等相同的属性,但我不能子类化它,因为我不能向下转换数据层返回的对象。
任何我可以接受的建议,包括“把它拿出来”,都将不胜感激。谢谢大家!
【问题讨论】:
-
您不想仅仅通过 WCF 公开您的数据层 - 您依赖 UI 来表现,这是不可靠/不可靠的。最好的方法是让 BL 位于 DAL 之上,并通过 WCF 向 UI 公开 BL 方法。这样,您的 BL 就成为您数据的看门人。您也不应该通过 WCF 从 BL 传递实体,您应该使用 DTO 来抽象您的实体并省略敏感字段(密码哈希等)。这些不应该离开您的 BL