4

我对我们可以使用 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 更改的好方法。

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

4

2 回答 2

2

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

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

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

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

于 2011-07-01T21:14:03.690 回答
1

也许WPF 应用程序架构一文对您有帮助。

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

于 2011-07-03T10:43:21.657 回答