我对我们可以使用 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 更改的好方法。
请您推荐在这种情况下的最佳模式或/并参考我一些关于此的好书或文件。