- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果有一个像这样分层的业务应用程序,这是否是一种适当的分工:
数据访问
调用仅 存储过程,映射 DTO 的属性s 到用于填充 ADO.NET 命令的参数集合的哈希表。
仅引用 SqlDataClient 的程序集。
所谓的业务逻辑
将多个结果集拆分为单独的数据表,例如
public void ReturnNthRecordSetFromStoredProcFoo()
传递到数据集的数据访问,例如
public void ReturnDataSet(字符串名称){ return (new PersonController).GetAnotherDataSet(name);
将 DataTable 的一行映射到一行 DTO
用户界面
那么最后的问题是——对于这个应用程序,数据访问层是否应该合并所谓的业务层的职责?这不是已经是两层了吗,(几乎一个!)应用程序除了额外组装的不便?
附加信息:好的,我已经知道应用程序服务器将是一台机器,可能永远是一台机器,因为它是一个低用户数的 Intranet 应用程序。所以我知道不要为物理上分离的应用程序层进行设计。此外,它可能只支持一个 UI,如果它需要支持 ASP.NET 以外的其他东西,它可能会被完全废弃——另一个经常被引用的层/层的原因。
最佳答案
在我看来,层级之间的责任有点困惑。数据层听起来相当标准。 (“所谓的”)业务层是事情变得困惑的地方。
关于业务层的一些思考:
似乎有很多数据表示。你提到了数据表、数据集、数据传输对象。整个应用程序的标准方法会更好。
名称为 ReturnNthRecordSetFromStoredProcFoo 和 ReturnDataSet 的业务层方法没有意义,并且没有为业务服务提供适当的抽象级别。 (也许这些只是选择不当的示例,而不是来自应用程序?)
通常,业务层提供的不仅仅是数据集传递。业务层不应处理映射、空值等,而应专注于验证、业务规则、安全性,甚至可能是审计(尽管有些人更喜欢在数据库中这样做)。
虽然业务层只是调用一个存储过程,但我对业务层的事务控制没有问题。业务层应该控制事务,以便多个数据对象都可以参与同一个事务(甚至可以跨不同的数据库)。即使现在只有一个调用,如果您将来需要添加更多调用,这将很容易,并且不会导致在您的应用程序中改进事务控制。
我认为依赖关系没问题——没有从业务层引用 Web.UI 或 SQLClient。
授权规则也OK。我会扩展到包括安全性而不仅仅是授权。此外,我在任何地方都看不到任何业务逻辑——只是想知道业务逻辑是否在存储过程中?如果我要猜的话,我会说是,因为每个业务方法只调用一个存储过程。如果是这样,那对我来说是一个很大的禁忌。
我不会将业务层和数据层结合起来。我更喜欢将业务逻辑层和数据访问层分开。如果要在合并它们和尝试将职责进一步分离之间做出选择,我会倾向于后者。
但是,鉴于这是一个存在问题的现有应用程序,我会采取更务实的观点。一切都是有代价的,重要的是要确定正在进行的更改、更改的工作量和风险、更改的真正好处是什么,以及更改将如何影响测试周期。
其他一些需要考虑的问题是:您想解决的主要问题是什么?它们是否起作用(例如错误、缺乏稳定性)?还是性能相关?或者它是建筑的?或者可能与可维护性有关——您是否需要添加新功能但发现很难?你有时间框架或预算吗?如果您能回答其中一些问题,它可能会帮助您找到方向。
关于.net - 如何拆分数据层和业务对象层,各自的职责是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1210387/
我是一名优秀的程序员,十分优秀!