2012-07-12 84 views
0

我正在设计一个数据驱动的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类,但我无法对此进行子类化,因为我无法向下转换由我的数据层返回的对象。

任何建议,我可以采取这一点,包括'查出来'将非常感激。谢谢你们!

+0

你不想只通过WCF暴露你的数据层 - 你依赖于UI的行为,这是不可靠/健壮的。最好的方法是让BL坐在DAL的顶部,并通过WCF将BL方法展示给UI。这样,你的BL就成为你数据的守门人。你也不应该通过WCF传递BL中的实体,你应该使用DTO来抽象你的实体并且省略敏感字段(密码哈希等)。这些永远不会离开你的BL – Basic 2012-07-12 16:08:19

回答

1

如果您有一些业务逻辑,那么中间的一个附加层就非常有意义,当然实施细节取决于您的要求。

如果你仔细想一想,基础数据类不应该知道如何登录,因为这已经是业务逻辑:这实际上是你考虑的方法背后的真正问题。

将业务逻辑隐藏在另一组服务中也是您应该考虑的选项,它可以在业务逻辑层面获得WCF的所有优势(以及拥有成本)。

Dino Esposito写了一本关于architecting enterprise applications的好书,也许你可以在那里找到一些灵感来实现你的分层架构。