You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中如何将Action方法拆分至独立DAL与BLL?

拆分方案:将GetLogs Action拆分为数据访问层(DAL)与业务逻辑层(BLL)

我们按照关注点分离的原则,把原Action中的代码拆分到三个独立部分:实体类、DAL、BLL,最后重构Controller。

1. 定义实体类

先把数据模型单独抽离,命名更贴合业务场景:

public class AccessLog
{
    public int LogActivityId { get; set; }
    public string LogActivityName { get; set; }
    public string LogActivityDesc { get; set; }
}

2. 数据访问层(DAL)

专门负责数据库连接、执行存储过程和数据读取,原Action中的数据库操作逻辑全部移到这里:

public class AccessLogDAL
{
    public List<AccessLog> GetAllLogs()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["DbConnString"].ConnectionString;
        var logs = new List<AccessLog>();
        
        using var connection = new MySqlConnection(connectionString);
        using var command = new MySqlCommand("Get_AccessLog", connection) 
        { 
            CommandType = CommandType.StoredProcedure 
        };
        
        connection.Open();
        using var reader = command.ExecuteReader();
        
        while (reader.Read())
        {
            logs.Add(new AccessLog()
            {
                LogActivityId = reader.GetInt32(0),
                LogActivityName = reader.GetString(1),
                LogActivityDesc = reader.GetString(2)
            });
        }
        
        return logs;
    }
}

3. 业务逻辑层(BLL)

作为Controller和DAL的中间层,负责封装业务规则(当前示例业务逻辑简单,仅做DAL调用封装,后续可扩展权限校验、数据过滤等逻辑):

public class AccessLogBLL
{
    private readonly AccessLogDAL _accessLogDAL;

    public AccessLogBLL()
    {
        _accessLogDAL = new AccessLogDAL();
    }

    public List<AccessLog> GetAccessLogs()
    {
        // 此处可添加业务逻辑,比如:
        // if (!UserHasPermission()) throw new UnauthorizedAccessException();
        return _accessLogDAL.GetAllLogs();
    }
}

4. 重构后的Controller Action

现在Controller只需要处理请求响应,不再关心数据库细节:

public ActionResult GetLogs()
{
    var accessLogBLL = new AccessLogBLL();
    var logs = accessLogBLL.GetAccessLogs();
    
    return View("GetLogs", logs);
}

拆分的核心优势

  • 关注点分离:Controller专注请求响应,DAL专注数据库操作,BLL专注业务规则
  • 可维护性:修改数据库连接、存储过程只需改动DAL,业务逻辑变更不影响数据访问层
  • 可测试性:DAL和BLL可以单独编写单元测试,无需依赖Controller或视图

内容的提问来源于stack exchange,提问作者Rajnikant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:05:22