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("登录失败");
}

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值