【问题标题】:What is the best architecture for a business application using WPF & EF?使用 WPF 和 EF 的业务应用程序的最佳架构是什么?
【发布时间】:2011-09-27 01:02:05
【问题描述】:

我对我们可以使用 WPF 4.0 和 EF 4.0 技术开发业务应用程序的架构感到困惑。

我的第一选择是传统的 N 层架构,其中包含:UI、业务逻辑层和数据访问层,具有断开连接的行为。

通过这种方式,我为每一层创建了 3 个项目,并为我的实体/DTO 创建了另一个项目(每一层都是一个程序集)。每个层只引用它的上层和下层(即:UI 可以看到 BLL 但看不到 DAL)。但是所有层都可以访问实体/DTO 程序集以进行通信。 例如,当我想使用 DataGrid 创建一个简单的 CRUD 表单时,问题就开始了。 BLL 在返回实体/DTO 时处理 DAL 的 DataContext,这就是迫使我使用 STE 的原因。但仍有几个问题。例如,我应该为从 BLL 返回到 UI 的每个实体调用“StartTracking”方法。简而言之,我不确定这种模式的可靠性,或者我认为我必须忘记自动处理的 CRUD 表单。

我在 DAL 层中使用存储库模型,但是当我搜索存储库模式时,我发现它有所不同。从 UI 中引用 DAL/Repository 和 BLL/Services(不是 WCF 或 WebServices)层似乎还不错,因此我们可以拥有一个连接的环境(不使用 STE)。

我看到一个例子,我们可以从存储库中获取一个人,但使用 BLL 或服务对其进行操作:

用户界面代码:

var person = new PersonRepository().GetPerson(10);
Bll.Salary.PaySalary(person);

-或-

var person = new PersonRepository().GetPerson(10);
Bll.Person.MarkAsAbsent(person);

或者类似的...

使用这种模式,我们可以在 DataContext 处于活动状态时以连接的方式将实体/DTO 发送到 UI。

我不知道我是否理解在大项目中使用存储库模式的方式。我认为以这种方式命名 BLL 或服务类和方法尚不清楚。更多的开发人员可能会对在哪里使用存储库方法或 BLL/服务方法或在哪里创建方法(在存储库或 BLL/服务中)感到困惑。

我更喜欢 N-Tier 架构,它使用一种像 STE 一样自动跟踪实体/DTO 更改的好方法。

请您推荐在这种情况下的最佳模式或/并参考一些关于此的好书或文档。

【问题讨论】:

    标签: wpf entity-framework architecture business-application


    【解决方案1】:

    我整理了一个示例应用程序,可以帮助您解决一些问题。您可以在此处通过我的博客文章查看演示说明和示例:

    http://blog.alner.net/archive/0001/01/01/wpf_ef_4_sig_presentation_2010.aspx

    该示例展示了如何使用 STE,并包含一些帮助程序以使实体框架 STE 在桌面客户端应用程序中更好地工作。

    存储库用于隐藏您如何获取数据的详细信息。这个想法是,您可以将存储库的实现从使用本地数据库的存储库转换为使用远程 Web 服务的存储库,而上层并不知道它。

    【讨论】:

    • 感谢样品。我会检查并回复。关于存储库,我和你一样想,但正如我所说,它似乎可以不同!
    • 如果您对样本有任何疑问,请告诉我。它基于我在过去一年中一直在开发的一个真实世界的 WPF 应用程序。就存储库的内容而言,肯定有很多关于如何做到这一点的想法。我认为重要的是要在有效的东西与理论上“纯”但难以理解的东西之间取得平衡。过于抽象会使事情变得非常难以理解/理解等。找到对你有意义的东西,然后去做。主要目标是“关注点分离”。
    • 非常感谢,这是一个很棒的样本!但它的业务逻辑在哪里?我们的项目中有大量的业务逻辑,这是我管理的问题。虽然我还是问我的问题;我可以在 n 层应用程序中引用我需要的任何层还是应该使用其他模式?我正在寻找一个好的 n 层业务模式。
    • 将业务逻辑放在哪里的问题在很大程度上取决于您的场景。我认为有很多合理的答案。如果需要,您可以将其放在中间层(服务器)上。但是,对于响应速度最快和最丰富的交互,您可能需要客户端上的一些/全部。在这种情况下,您有几个地方可以放置逻辑:
    • - 在模型中(参见领域驱动设计/DDD)。无论模型的状态如何,这对于始终为真的规则都有好处。虽然不适合基于工作流的规则。 - 在视图模型中。这是规则的一个不错的地方,但确实限制了它们对使用该视图模型的视图的重用。 - 在“服务层”中。服务,我指的不是网络服务,而是图书馆。
    【解决方案2】:

    也许Architecture for WPF applications 这篇文章对你有帮助。

    您还可以查看 WPF Application Framework (WAF) 的 BookLibrary 示例应用程序。它显示了一个 WPF MVVM 应用程序以及应用所描述架构的实体框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2017-08-16
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多