c# - 业务层或 Controller 中的计算以查看特定信息

标签 c# asp.net-mvc n-tier-architecture bll

我正在使用 n 层方法构建 ASP.Net MVC Web 应用程序。我的结构如下所示:

Business Objects - Model
Data Access Layer - DAL
Business Logic Layer - BLL
Mapping Layer
ViewModels
Controllers
Views

我通常把计算放在业务层,但是那些只用于展示目的的计算呢?例如,在我的应用程序的一个 View 中,我显示了发票总额、任何付款和欠款。欠款余额是计算得出的金额。因为我在我的应用程序中多次使用 BalanceOwing,所以我倾向于在我的 BLL 中创建一个通用的 BalanceOwing 方法,但在其他情况下,计算只会用于一个 View 。在这种情况下,计算应该进入 Controller 还是在我的情况下进入映射层? (我有一个映射层,用于将域模型转换为 View 模型。它使 Controller 更整洁)。

那真的是分界线吗?也就是说,如果我可以概括一个计算并多次使用它,它应该放在 BLL 中,但如果它特定于一个 View ,它应该放在 Controller 或映射器中?

总结:

我接受了@trailmax 的回答,因为他看到一些我认为是表示逻辑的东西实际上是业务逻辑,因此属于 BLL。如果某些东西确实是表示逻辑并且涉及分页等计算,我会将它们放在实用程序类或扩展方法中,如@ramiramilu 所述

最佳答案

我不喜欢 Controller 中的任何实际逻辑。所以,我会把它移到现有的 BLL 中,如果您想将它分开,甚至可以移到 BLL 中的一个新组件中。

我采用这种方法的原因有两个。

首先,这种逻辑往往会失控,它确实会使您的 Controller 操作变得困惑。我喜欢它们非常简洁。 (我通常会在其中发生三件事 - 身份验证、数据检索、ViewModel 构造。这些都是通过以某种形式的 BLL 调用单独的方法来实现的。)

第二个原因,是因为 Controller 操作更难进行单元测试,尤其是当它们有很多困惑的逻辑时。以这种方式构建我的 Controller 操作确实有助于良好的单元测试实践。

关于c# - 业务层或 Controller 中的计算以查看特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21282341/

相关文章:

c# - DTO POCO转换

asp.net-mvc - 在 ASP.NET MVC 中将实体映射到模型并执行业务逻辑

c# - 使用 iTextSharp 裁剪 PDF

c# - 下拉菜单选择在 Phantomjs 上使用 C# selenium 不起作用

asp.net - 剑道 TabStrip : Getting the Selected Index on the Selected event (MVC 4)

asp.net-mvc - 将 Telerik Datepicker 添加到动态添加的表单字段

.props 文件中的 C# 引用

c# - Entity Framework - 在程序集中找不到迁移配置类型

c# - 恢复 session 的最佳方式?

c# - 在哪里放置业务实体、枚举、自定义异常?