Принципы уравновешивают друг друга
Принципы уравновешивают друг друга

Зачем нужны принципы

Принципы — не законы, а правила, выросшие из опыта: они удешевляют изменение кода. Иногда они противоречат друг другу, поэтому нужно знать каждый и держать баланс. Связанные темы: антипаттерны, SRP.

DRY: Don't Repeat Yourself

Каждое знание должно жить в системе в одном месте. Если одна проверка повторена в двух функциях, при изменении правила легко забыть одну из них.

python
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"))
text
{'name': 'Anna', 'email': 'anna@mail.io'}

Теперь правило в одном месте:

python
def validate(name, email):
    if not name.strip():
        raise ValueError("name is empty")
    if "@" not in email:
        raise ValueError("bad email")