【发布时间】:2010-10-11 22:18:47
【问题描述】:
我正在努力为一个让我发疯了很长时间的问题找到一个明确的最终答案。
通常表示 BLL 应包含业务逻辑和业务对象 (BO),并具有对 DAL 的引用。另一方面,DAL 不能引用 BLL,因此它不能接受 BO 作为参数,或将 BO 作为返回值返回。
这个问题最传统的答案是:
a) 接受简单参数,并返回(最好是 Typed)DataSets 和 DataTables 以返回数据: 命名空间 DAL { 公开课联系人 公共数据表 GetContacts(){...} 公共 UpdateContacts(数据表联系人){...}
b) 第二个最推荐的解决方案是定义临时的、可序列化的数据传输对象 (DTO)(有时称为值对象 (VO)),它只有字段和属性,没有方法,仅用于短暂传输数据备份到 BLL 层,在那里用于填充新的 BO,然后将它们丢弃。
c) 使用定义 BO 的通用第三个程序集(例如称为 Entities.dll),并被所有 3 层引用:UI、BLL 和 DAL。
选项 a) 实现的工作量最少(无需构建另一个程序集),因此经常被提出,但 DataTables 有额外的布线,不需要仅用于简单的操作。
但目前还不清楚 b) 或 c) 哪个更好......
我看到 b) 有时提供,但几乎从不提供 c),尽管 c) 似乎是两者中最简单的。
我错过了什么?为什么 c) 很少提供,尽管它在逻辑上看起来是最简单的,为什么 a) 在它显然不适合所有场景(例如返回单个对象)时提供?
谢谢!
【问题讨论】:
标签: c# architecture