Зачем нужны принципы
Принципы — не законы, а правила, выросшие из опыта: они удешевляют изменение кода. Иногда они противоречат друг другу, поэтому нужно знать каждый и держать баланс. Связанные темы: антипаттерны, SRP.
DRY: Don't Repeat Yourself
Каждое знание должно жить в системе в одном месте. Если одна проверка повторена в двух функциях, при изменении правила легко забыть одну из них.
def create_user(name, email):
if not name.strip():
raise ValueError("name is empty")
if "@" not in email:
raise ValueError("bad email")
return {"name": name, "email": email}
def update_user(user, name, email):
if not name.strip():
raise ValueError("name is empty")
if "@" not in email:
raise ValueError("bad email")
user.update(name=name, email=email)
return user
u = create_user("Ann", "ann@mail.io")
print(update_user(u, "Anna", "anna@mail.io")){'name': 'Anna', 'email': 'anna@mail.io'}Теперь правило в одном месте:
def validate(name, email):
if not name.strip():
raise ValueError("name is empty")
if "@" not in email:
raise ValueError("bad email")