8

我正在使用 ASP.NET Web 表单 C# 从头开始​​创建一个解决方案。

我担心模型对象,因为我不想在每一层中创建重复的模型对象集。在 3 层架构中使用模型对象的最佳实践是什么Web Forms

我想到的结构如下:

  • 用户界面
  • BLL
  • 达尔
  • 模型

模型将包含可在层的每个部分中使用的所有模型类。我认为这会很有用,因为每一层都需要访问模型对象。例如:

  1. UI 调用 BLL 中的一个方法,传入一个填充了数据的模型对象。
  2. BLL 通过保存在数据库等中的对象调用 DAL 中的方法。

谢谢

4

4 回答 4

9

模型可以是您的层的横切关注点,这是一种快速的方法。或者你可以为你的模型创建接口,这样你就可以简单地在 BLL 之类的东西中充实接口——这至少可以阻止它被横切。

它进一步取决于您的模型是简单的数据容器(贫血域模型)还是包含行为,例如验证自身或跟踪更改本身的能力(富域模型)。

您会发现您的 DAL 实际上由两部分组成:从不特定于与数据库对话的应用程序代码的样板文件,以及特定于应用程序的填充模型代码。我们有这种情况。我们共享模型的接口,特定于应用程序的 DAL 代码可以使用此接口从模型中推送和拉取数据,但“真正的”DAL 代码使用原始数据。

于 2012-01-05T11:19:14.733 回答
5

在一个相对较小的应用程序中,您可以Domain Entities一直共享您的内容,Presentation layer但要注意这引入的耦合。

如果在您的数据绑定中,您除了一个类型的实体,Customer其属性Address具有一个StreetLine1StreetLine2属性,那么您的所有层都紧密耦合在一起,并且一层中的更改可能会导致其他层的更改。

所以你的决定应该基于你的项目规模和你可以拥有的耦合量。

如果您选择低耦合设计,那么您BLL将使用您的DAL来检索实体并使用这些实体来执行行为。然后BLLData Transfer Objects用于传递给您Presentation layer,因此您presentation layer和您的Domain Model.

于 2012-01-05T12:04:32.747 回答
1

在这里查看我的答案:https ://stackoverflow.com/a/7474357/559144  这是我做事的常用方式,而且效果很好,不仅适用于 MVC 和实体框架......事实上,在 MVC 中,模型可能是一个实体类型,它只包含在较低层中定义的真实业务实体所包含的一些字段,这取决于您是否真的绝对需要 UI 级别中的所有字段,或者只需要一些字段来进行一些数据渲染和输入...... 

于 2012-01-12T09:48:03.577 回答
0

作为一个相关主题,请参阅我最近发布的关于在跨平台客户端/服务器系统中避免代码重复和正确架构的相关答案。

我已经 +1 了这个帖子中的其他海报,因为这不是一个完整的答案,只是与问题相关的有用信息。

此致,

于 2012-01-05T12:08:22.437 回答