我试图找到一个很长一段时间让我疯狂的问题的最终答案.
通常表示BLL应该包含业务逻辑和业务对象(BO),并且引用DAL.另一方面,DAL不能引用BLL,因此它不能接受BO作为参数,或者将BO作为返回值返回.
这个问题最常见的答案是:
a)接受简单参数,并返回(最好是Typed)DataSet和DataTables以返回数据:namespace DAL {public class Contacts public DataTable GetContacts(){...} public UpdateContacts(DataTable contacts){...}
b)第二个最推荐的解决方案是定义临时的,可序列化的数据传输对象(DTO)(有时称为值对象(VO)),它只包含字段和属性,没有方法,仅用于简单地传输数据BLL层,用于填充新的BO,然后丢弃它们.
c)使用定义BO的公共第三个程序集(例如,称为Entities.dll),并由所有3个层引用:UI,BLL和DAL.
选项a)实现最少的工作(不需要构建另一个程序集),因此为什么经常提出,但DataTables有额外的连接,不需要仅仅为简单的操作.
然而,目前尚不清楚b)或c)中的哪一个更好......
我看到b)有时提供,几乎从不c),虽然c)似乎是两者中最容易的.
我错过了什么?为什么c)很少提供,即使它看起来在逻辑上是最简单的,为什么a)当它明显不适合所有场景(例如返回单个对象)时提供?
谢谢!