我正在设计一个数据驱动的Windows应用程序,它不是由底层SQL Server提供,而是由WCF服务提供,以允许本地和远程访问。构建WCF数据层和WPF前端之间的业务层
说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验证用户登录既不属于数据层,也不属于r表示层,而是中间业务逻辑层。
我不确定如何去做这件事。我会在我的表现层更喜欢能够做到的线沿线的东西:
User.Login();
,并为用户对象,以抽象的像域,帐户等相同的属性,按我的UserAdapter类,但我无法对此进行子类化,因为我无法向下转换由我的数据层返回的对象。
任何建议,我可以采取这一点,包括'查出来'将非常感激。谢谢你们!
你不想只通过WCF暴露你的数据层 - 你依赖于UI的行为,这是不可靠/健壮的。最好的方法是让BL坐在DAL的顶部,并通过WCF将BL方法展示给UI。这样,你的BL就成为你数据的守门人。你也不应该通过WCF传递BL中的实体,你应该使用DTO来抽象你的实体并且省略敏感字段(密码哈希等)。这些永远不会离开你的BL – Basic 2012-07-12 16:08:19