首页 > 解决方案 > 设计问题 - Dot-Net 3 层应用程序中的 ORM 与 OOP - 对象应该保持自身还是只有业务逻辑层应该调用 DAL

问题描述

我有一个使用一些业务对象的应用程序 - 例如“用户”。我有一个应该处理数据库调用的 DAL 层。

现在我想从数据库中获取 ID 为 100 的用户。有两种选择:

选项1:User user = new User(100);

选项 2:User user = BusinessLogicLayer.UserBL.GetUserFromID(100);

在选项 1 中 - 用户类是“自我维护的”,但如果我想保持层的分离 - 它需要访问 DAL 层并且 DAL 层需要知道这个对象(哪种创建循环引用)

在选项 2 中 - 用户类只是属性的集合。业务逻辑层和 DAL 层都知道它 - 但它本身没有能力(b/c 它被两者引用但不能引用它们)。

首选方法应该是什么?

标签: c#.netdesign-patterns

解决方案


选项1:用户用户=新用户(100);

基于Clean Code鲍勃叔叔等许多知名资源,数据结构应始终与其业务逻辑分开。在您的第一个选项中,User两者都是data model并且logic service是错误的。

如果您还想删除用户或对其进行身份验证或...,您会怎么做?SOLID第一种方法违反原则(特别是)非常不稳定SRP

选项2:用户user = BusinessLogicLayer.UserBL.GetUserFromID(100);

您应该有一个数据模型User及其分离的业务逻辑类,如UserService, AuthenticationService, ... 并且这些服务使用您的DAL(可能您基于RepositoryUnit of work模式编写它)来获取数据并执行它们的功能。


推荐阅读