【问题标题】:Architecting of a business layer between WCF data layer and WPF front end在 WCF 数据层和 WPF 前端之间构建业务层
【发布时间】: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

标签: wcf n-tier-architecture


【解决方案1】:

如果您有一些业务逻辑,中间的附加层绝对有意义,实现细节当然取决于您的要求。

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

将业务逻辑隐藏在另一组服务后面也是您应该考虑的一个选项,在业务逻辑级别获得 WCF 的所有好处(以及拥有成本)。

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

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2011-12-27
    • 2012-11-27
    • 2014-04-13
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多