.NET N层体系结构:如何处理Model对象

本文关键字:处理 Model 对象 何处理 体系结构 NET | 更新日期: 2023-09-27 18:19:26

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

我很关心模型对象,因为我不想在每个层中创建重复的模型对象集。在Web Forms的3层体系结构中使用Model对象的最佳实践是什么?

我脑海中的结构如下:

  • UI
  • BLL
  • DAL
  • 型号

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

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

感谢

.NET N层体系结构:如何处理Model对象

模型可以与您的层交叉,这是一种快速的方法。或者您可以为模型创建接口,这样您就可以简单地用类似BLL的东西来充实接口-这至少可以阻止它交叉。

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

你可以发现,你的DAL实际上由两个部分组成:样板从来没有特定于应用程序代码来与数据库对话,而特定于应用的填充模型代码。我们有这种情况。我们共享我们模型的接口,特定于应用程序的DAL代码可以使用此接口从模型中推送和提取数据,但"真正的"DAL代码适用于原始数据。

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

如果在数据绑定中,除了类型为Customer、属性为Address、属性为StreetLine1StreetLine2的实体外,所有层都紧密耦合在一起,一个层中的更改可能会导致其他层中的变化。

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

如果您采用低耦合设计,那么BLL将使用DAL来检索实体,并使用这些实体来执行行为。然后,BLL将使用Data Transfer Objects传递给Presentation layer,因此presentation layerDomain Model之间没有耦合。

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

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

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

致问候,