软删除

软删除是一种常见的数据库设计模式,用于在删除数据时并不真正从数据库中移除数据,而是将其标记为已删除。这种设计模式的主要目的是保留数据的完整性和历史记录,并提供一种恢复数据的机制。

软删除的业务逻辑可以通过在数据库中添加一个额外的字段(例如 IsDeleted)来实现。当数据被标记为已删除时,该字段的值被设置为 True1,表示该数据已被逻辑上删除。在查询数据时,应该将只返回未被标记为已删除的数据。

 

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsDeleted { get; set; }
}

public interface IUserRepository
{
    void DeleteUser(int id);
    IEnumerable<User> GetActiveUsers();
    IEnumerable<User> GetAllUsers();
}

public class UserRepository : IUserRepository
{
    private readonly List<User> _users;

    public UserRepository()
    {
        _users = new List<User>();
    }

    public void DeleteUser(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user != null)
        {
            user.IsDeleted = true;
        }
    }

    public IEnumerable<User> GetActiveUsers()
    {
        return _users.Where(u => !u.IsDeleted);
    }

    public IEnumerable<User> GetAllUsers()
    {
        return _users;
    }
}

在这个示例中,我们定义了一个 User 类,其中包含了一个 IsDeleted 字段来表示用户是否被标记为已删除。
然后,我们创建了一个 UserRepository 类实现了 IUserRepository 接口,用于处理用户数据的增删改查操作。

当调用 DeleteUser 方法时,会将指定的用户标记为已删除,而不是直接从数据库中删除


在查询用户数据时,GetActiveUsers 方法只返回未被标记为已删除的用户。

软删除的方式,我们可以在需要的时候恢复已删除的数据,或者保留历史记录

比如,我们可以在用户界面上提供一个 "回收站" 功能,让用户可以查看和恢复已删除的数据。

请注意,软删除并不适用于所有业务场景,它的使用应该根据具体的需求和业务规则来确定。有些情况下,直接物理删除数据可能更为合适。

posted @ 2023-12-07 15:03  ProZkb  阅读(84)  评论(0编辑  收藏  举报