我希望我的所有层 BLL、DAL 和 UI 共享类(具体或接口)。
这真的是一个坏习惯吗?
我不想从我的 DAL 方法返回数据表,而是返回 BLL 可以直接使用的对象。
我想要一个单独的 VS 项目,其中包含所有层都应该知道的类。
示例:我想定义一个所有层都应该知道的很多类。UI 应该能够接收批次类,以便显示或使用户能够提交要处理的批次。此外,DAL 应该能够使用批次类查询数据库并返回它们。另一方面,BLL 应该获得这些批次并将业务规则应用于它们。
如果这是完全错误的,还有哪些选择?
我希望我的所有层 BLL、DAL 和 UI 共享类(具体或接口)。
这真的是一个坏习惯吗?
我不想从我的 DAL 方法返回数据表,而是返回 BLL 可以直接使用的对象。
我想要一个单独的 VS 项目,其中包含所有层都应该知道的类。
示例:我想定义一个所有层都应该知道的很多类。UI 应该能够接收批次类,以便显示或使用户能够提交要处理的批次。此外,DAL 应该能够使用批次类查询数据库并返回它们。另一方面,BLL 应该获得这些批次并将业务规则应用于它们。
如果这是完全错误的,还有哪些选择?
我希望我的所有层 BLL、DAL 和 UI 共享类(具体或接口)。
这取决于什么类型的类。如果您需要它们来访问公共域实体,那么当然可以。
重要的部分是您允许这些层对这些类做什么。您的客户端/UI 层不应该通过一些集中的业务逻辑来修改域实体(并保留它们)。这意味着您的用户界面不应访问您的 DAL,尽管它们都可以共享通用实体、接口等......
一种常见的方法是这样的:
UI -> BLL -> DAL -> 持久性存储(数据库、文件等...)
这些层中的每一层都可以访问公共类。只要 UI 不能直接访问 DAL,就应该没问题。为此,您有几个选择:
你最终会得到类似的东西:
UI -> 服务 -> BLL -> DAL -> 持久性存储(数据库、文件等...)
我强烈推荐Martin Fowler的企业应用架构模式。它将为您分层应用程序提供良好的基础。
我不想从我的 DAL 方法返回数据表,而是返回 BLL 可以直接使用的对象。
这是个好主意。这就是ORM的想法发挥作用的地方。DAL 通常会知道如何与 DB 对话,并且 DAL 也会知道如何将特定于 DB 的结构转换为您的域模型。域实体进出 DAL。在 DAL 中,域实体在持久化数据时被转换为特定于 DB 的结构。反之亦然:当 BLL 请求数据时,DAL 检索数据并将其转换为域实体,然后再将其传回。