当前位置: 首页 > news >正文

ASP.NET Core的贫血模型与充血模型

目录

概念

需求

贫血模型

充血模型

总结


概念

  1. 贫血模型:一个类中只有属性或者成员变量,没有方法。
  2. 充血模型:一个类中既有属性、成员变量,也有方法。

需求

定义一个类保存用户的用户名、密码、积分;用户必须具有用户名;为了保证安全,密码采用密码的散列值保存;用户的初始积分为10分;每次登录成功奖励5个积分,每次登录失败扣3个积分。

贫血模型

优点:简单清晰,适合小型项目或简单业务逻辑。

缺点:业务逻辑分散,不利于复杂业务场景的维护。

class User
{
	public string UserName { get; set; }//用户名
	public string PasswordHash { get; set; }//密码的散列值
	public int Credit { get; set; }//积分
}
User u1 = new User(); u1.UserName = "ljy"; u1.Credit = 10;
u1.PasswordHash = HashHelper.Hash("123456");//计算密码的散列值
string pwd = Console.ReadLine();
if(HashHelper.Hash(pwd)==u1.PasswordHash)
{
    u1.Credit += 5;//登录增加5个积分
    Console.WriteLine("登录成功");
}
Else
{
    if (u1.Credit < 3)
         Console.WriteLine("积分不足,无法扣减");
    else
    {
        u1.Credit -= 3;//登录失败,则扣3个积分
    }
    Console.WriteLine("登录失败");
}

充血模型

符合“单一职责原则”

class User
{
	public string UserName { get; init; }        
	public int Credit { get; private set; }
	private string? passwordHash;
	public User(string userName)
	{
		this.UserName = userName;
		this.Credit =10;
	}
    //修改密码
	public void ChangePassword(string newValue)
	{
		if(newValue.Length<6)
		{
			throw new Exception("密码太短");
		}
		this.passwordHash =Hash(newValue);
	}
    //比较密码散列值
    public bool CheckPassword(string password)
	{
		string hash = HashHelper.Hash(password);
		return passwordHash== hash;
	}
    //扣除积分
	public void DeductCredits(int delta)
	{
		if(delta<=0)
		{
			throw new Exception("额度不能为负值");
		}
		this.Credit -= delta;
	}
    //增加积分
	public void AddCredits(int delta)
	{
		this.Credit += delta;
	}
}
User u1 = new User("ljy");
u1.ChangePassword("123456");
string pwd = Console.ReadLine();
if (u1.CheckPassword(pwd))
{
    u1.AddCredits(5);
    Console.WriteLine("登录成功");
}
else
{
    u1.DeductCredits(5);
    Console.WriteLine("登录失败");
}

总结

贫血模型是站在开发人员的角度思考问题,充血模型是站在业务的角度思考问题。

相关文章:

  • PortSwigger——WebSockets vulnerabilities
  • 稀土紫外屏蔽剂:科技护航,守护您的健康与美丽
  • Docker拉不下来镜像问题解决法案
  • SpringMVC请求执行流程源码解析
  • 和鲸科技上线 DeepSeek 系列模型服务,助力数智企业 AI 业务创新!
  • [开源]MaxKb+Ollama 构建RAG私有化知识库
  • 【Linux】操作系统的理解/进程/环境变量/虚拟地址空间
  • android的第一个app项目(java版)
  • 微信小程序网络请求封装
  • DeepSeek从入门到精通:全面掌握AI大模型的核心能力
  • 【AI学习】关于 DeepSeek-R1的几个流程图
  • JVM——垃圾回收算法
  • STM32 RCC功能说明 复位和时钟控制RCC
  • 【Uniapp】关于实现下拉刷新的三种方式
  • R18 XR L1 enhancement
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 【大语言模型】最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • 【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘
  • 【清晰教程】本地部署DeepSeek-r1模型
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 联合国报告:全球经济前景恶化,面临高度不确定性
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢
  • 外交部:各方应为俄乌双方恢复直接对话创造条件
  • “典孝急乐批麻蚌赢”:互联网“八字真言”与当代赛博赢学
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外