次のコードを考慮する
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;
}
}
これはオープン/クローズの原則ですか?つまり、ほとんどの責任を基本クラスに委譲し、特定の機能的責任を継承クラスに許可します。
って感じではないので、開閉主義じゃないとしたらどういうデザインパターンなんですか?
乾杯