Скажите пожалуйста, правильно ли я понимаю, что принципы solid это не рецепт на все случаи? И вполне обычное явление - умышленное нарушение некоторых solid-принципов.
Например существует паттерн
фабричный метод. Вот его реализация:
class Door:
def __init__(self, weight):
self.weight = weight
def __str__(self):
return str(self.weight)
class Brick:
def __init__(self, weight):
self.weight = weight
def __str__(self):
return str(self.weight)
class FactoryMethod:
def create(self, weight, type_):
pass
class Creator(FactoryMethod):
def create(self, type_, weight):
if type_ == 'door':
print('door with weight: ', Door(weight))
else:
print('brick with weight: ', Brick(weight))
c = Creator()
c.create('brick', 10)
c.create('door', 100)
Как видите, он нарушает один из принципов solid, а конкретно принцип открытости/закрытости. Если понадобится генерировать кроме дверей и кирпичей, ещё и окна, то придётся вносить изменения в метод Creator.create()
А принцип открытости/закрытости запрещает изменять написанный ранее код, он разрешает только добавлять новый.