这是开放/封闭原则吗?如果不是

| 考虑以下代码
public interface IEntity {
int Id { get; set; }
}

public class User : IEntity {
    public int Id { get; set; }
}

public abstract class RepositoryBase<TEntity> where TEntity : IEntity {

    public bool Save(TEntity entity) {
        if (!IsValid(entity)) return false;

        // Write to data store

        return true;
    }

    public abstract TEntity CreateNew();

    protected abstract bool IsValid(TEntity entity);
}


public class UserRepository : RepositoryBase<User> {

    public override User CreateNew() {
        return new User {
            Id = 3
        };
    }

    protected override IsValid(User entity) {
        return entity.Id > 0;
    }
}
这是开放/封闭的原则吗?即,将大部分责任交给基类,并允许某些功能职责继承类。 感觉并非如此,因此,如果不是开放式/封闭式原理,那么这是一种什么样的设计模式? 干杯     
已邀请:
您可以通过以不同方式扩展
RepositoryBase<TEntity>
来创建用于不同数据结构的新存储库,而无需修改
RepositoryBase<TEntity>
中的代码。这就是开放/封闭原则的核心含义。 也就是说,打开/关闭原则是一般设计原则,而不是设计模式。在
Save
IsValid
方法的关系中可见的主要设计模式是模板方法。     
正如您可以在Wikipedia上阅读的那样,OCP有两个定义。一种可能最常用于stackoverflow的是多态的。我更喜欢保护变体自旋,因为理想情况下,我们希望设计一种允许在一个地方进行变体的设计,它不会影响依赖于那些变体的某些(受保护)类。 在您的示例中,如果您在客户端和实现之间没有直接耦合,则IEntity实现的变体不会影响使用IEntities的客户端类。也就是说,客户应该只了解IEntities,而不是特定的实现。这通常需要实施工厂,以便客户可以在不具体了解实施的情况下访问实施。     

要回复问题请先登录注册