Asp.net基础三层框架是很多中小型项目常用的架构模式,核心就是将整个系统的功能拆分到Web服务器、业务服务器、数据库服务器三个部分,每个部分各司其职,降低系统的耦合度,提升可维护性。

Web服务器的作用与实现
Web服务器是面向用户的第一层,主要负责接收用户的请求,返回对应的页面或者数据,它不直接处理业务逻辑,只做请求的转发和结果的展示。在Asp.net中,Web服务器通常对应表现层,比如MVC项目中的Controller和View部分。
以下是一个简单的Web服务器接收用户请求并调用业务服务器的代码示例:
// Web层控制器代码
using System.Web.Mvc;
using Business.Service; // 引用业务层命名空间
namespace Web.Controllers
{
public class UserController : Controller
{
// 实例化业务层用户服务
private UserService _userService = new UserService();
// 处理用户查询请求
public ActionResult GetUserInfo(int userId)
{
// 调用业务服务器的方法获取用户数据
var userInfo = _userService.GetUserById(userId);
// 将数据传递给视图展示
return View(userInfo);
}
}
}
业务服务器的核心职责
业务服务器是三层框架的中间层,负责处理所有的业务逻辑,比如数据校验、规则计算、流程控制等,它接收Web服务器的调用请求,处理完成后返回结果,同时会调用数据库服务器获取或者存储数据。业务服务器对应Asp.net项目中的业务逻辑层,通常会封装各种业务服务类。
业务服务器的代码示例如下:
// 业务层用户服务代码
using DataAccess.Repository; // 引用数据访问层命名空间
namespace Business.Service
{
public class UserService
{
// 实例化数据访问层的用户仓储
private UserRepository _userRepository = new UserRepository();
// 根据ID获取用户的业务逻辑
public User GetUserById(int userId)
{
// 业务校验:ID必须大于0
if (userId <= 0)
{
return null;
}
// 调用数据库服务器获取数据
return _userRepository.QueryUserById(userId);
}
}
// 用户实体类
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
}
数据库服务器的功能说明
数据库服务器是三层框架的最底层,负责数据的持久化存储,所有需要保存的数据都存在这里,它只负责执行数据的增删改查操作,不处理任何业务逻辑。在Asp.net项目中,数据库服务器通常对应数据访问层,负责和数据库进行交互。
数据访问层的代码示例如下:
// 数据访问层用户仓储代码
using System.Data.SqlClient;
using Business.Service; // 引用业务层实体类命名空间
namespace DataAccess.Repository
{
public class UserRepository
{
// 数据库连接字符串,实际项目中会放在配置文件中
private string _connStr = "Server=192.168.0.1;Database=TestDB;Uid=sa;Pwd=123456;";
// 根据ID查询用户数据
public User QueryUserById(int userId)
{
User user = null;
string sql = "SELECT Id, Name, Email FROM Users WHERE Id = @UserId";
using (SqlConnection conn = new SqlConnection(_connStr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@UserId", userId);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
user = new User
{
Id = reader.GetInt32(0),
Name = reader.GetString(1),
Email = reader.GetString(2)
};
}
}
}
}
return user;
}
}
}
三者的协同工作流程
三个服务器的协同流程非常清晰:用户发起请求到Web服务器,Web服务器将请求转发给业务服务器,业务服务器处理业务逻辑时如果需要数据,就调用数据库服务器获取数据,数据库服务器返回数据给业务服务器,业务服务器处理完结果返回给Web服务器,最后Web服务器将结果返回给用户。
三层框架的优势
- 职责分离,每个层的代码只做自己的事情,修改某一层的逻辑不会影响其他层
- 便于团队协作,不同开发者可以分别负责不同层的开发
- 可维护性强,出现问题时可以快速定位到对应的层进行排查
- 复用性高,业务层的逻辑可以被多个Web层的接口调用
注意事项
在实际开发中,三个服务器不一定需要部署在不同的物理机器上,小型项目可以部署在同一台服务器上,只要代码层面做好分层即可。另外,层与层之间的依赖应该是单向的,Web层依赖业务层,业务层依赖数据访问层,不能反向依赖,否则会破坏分层的意义。