如果有一个像这样分层的业务应用程序,这是否是适当的分工:
数据访问
仅调用存储过程,将DTO的属性映射到哈希表,用于填充 ADO.NET 命令的参数集合。
仅参考 SqlDataClient 的程序集。
- 处理映射代码中的空白、null 和空的含义的重要逻辑,但其他情况下没有验证或其他特定于域的逻辑。
所谓的业务逻辑
将多个结果集拆分为单独的数据表,例如
公共无效 ReturnNthRecordSetFromStoredProcFoo()
传递到数据集的数据访问,例如
public void ReturnDataSet(string name){ return (new PersonController).GetAnotherDataSet(name);}
将 DataTable的一行映射到一个DTO
- 处理映射代码中空白、空值和空的含义的重要逻辑。
- 保存事务对象,尽管它专门用于包装单个存储过程调用。
- 没有对 SqlDataClient 的引用,所以它不能使用 SqlDataReaders 来填充 DTO
- 没有参考 System.Web.UI
- 授权规则,但除此之外没有特定于域的逻辑。
用户界面
- DTO 到 ASP.NET 表单的 2 路数据绑定。
- 控件属性的验证 - 通常不直接针对 DTO 进行验证
- 通过将 DataSet 绑定到网格来导航“集合”。实际上,尝试对集合进行任何操作都需要 UI 遍历 DataTables 中的 DataRows 并知道适当的列名是什么(通常只是与 DTO 有点相似)
所以最后的问题是——对于这个应用程序,数据访问层是否应该承担所谓的业务层的职责? 除了额外组装带来的不便之外,这不是已经是两层(几乎是一层!)应用程序了吗?
附加信息:好的,我已经知道应用程序服务器将是一台机器,可能永远是一台机器,因为它是一个低用户数的 Intranet 应用程序。所以我知道不要设计物理上独立的应用程序层。此外,它可能只支持一个 UI,如果它需要支持 ASP.NET 以外的其他东西,它可能会被完全废弃——这是层/层的另一个经常引用的原因。