.NET N层体系结构:如何处理Model对象
本文关键字:处理 Model 对象 何处理 体系结构 NET | 更新日期: 2023-09-27 18:19:26
我正在使用ASP.NET Web表单C#从头开始创建一个解决方案。
我很关心模型对象,因为我不想在每个层中创建重复的模型对象集。在Web Forms
的3层体系结构中使用Model对象的最佳实践是什么?
我脑海中的结构如下:
- UI
- BLL
- DAL
- 型号
该模型将包含可在层的每个部分中使用的所有模型类。我认为这会很有用,因为每个层都需要访问模型对象。例如:
- UI调用BLL中的一个方法,传递一个充满数据的模型对象
- BLL通过保存的对象调用DAL中的方法在数据库等中
感谢
模型可以与您的层交叉,这是一种快速的方法。或者您可以为模型创建接口,这样您就可以简单地用类似BLL的东西来充实接口-这至少可以阻止它交叉。
这进一步取决于您的模型是简单的数据容器(贫血症域模型),还是包含行为,例如验证自身或跟踪自身变化的能力(富域模型)。
你可以发现,你的DAL实际上由两个部分组成:样板从来没有特定于应用程序代码来与数据库对话,而特定于应用的填充模型代码。我们有这种情况。我们共享我们模型的接口,特定于应用程序的DAL代码可以使用此接口从模型中推送和提取数据,但"真正的"DAL代码适用于原始数据。
在一个相对较小的应用程序中,您可以共享Domain Entities
一直到Presentation layer
,但要注意这会带来耦合。
如果在数据绑定中,除了类型为Customer
、属性为Address
、属性为StreetLine1
和StreetLine2
的实体外,所有层都紧密耦合在一起,一个层中的更改可能会导致其他层中的变化。
因此,你的决定应该基于你的项目规模和你可以拥有的耦合量。
如果您采用低耦合设计,那么BLL
将使用DAL
来检索实体,并使用这些实体来执行行为。然后,BLL
将使用Data Transfer Objects
传递给Presentation layer
,因此presentation layer
和Domain Model
之间没有耦合。
看看我的答案:https://stackoverflow.com/a/7474357/559144这是我做事的常用方式,而且效果很好,不仅适用于MVC和实体框架。。。事实上,在MVC中,模型可能是一种实体类型,它只包含在较低层中定义的真实业务实体所包含的一些字段,这取决于你是否真的绝对需要UI级别中的所有字段,或者只需要一些字段来进行一些数据呈现和输入。。。
作为一个相关主题,请参阅我最近发布的关于在跨平台客户机/服务器系统中避免代码重复和正确架构的相关回答。
我在这个帖子中有+1张其他海报,因为这不是一个完整的答案,只是与问题相关的有用信息
致问候,