Някои обекти са винаги заедно. Защо не ги разделим?
TL;DR: Накарайте сплотени примитивни обекти да пътуват заедно
проблеми
- Лоша кохезия
- Дублиран код
- Сложност на валидирането
- Четивност
- Ремонтопригодност
Решения
- Извличане на клас
- Намерете малки предмети
Контекст
Тази миризма се сприятелява с примитивната мания.
Ако два или повече примитивни обекта са залепени заедно, с повтаряща се бизнес логика и правила между тях, трябва да намерим съществуващата концепция на „биекцията“.
Примерен код
погрешно
public class DinnerTable
{
public DinnerTable(Person guest, DateTime from, DateTime to)
{
Guest = guest;
From = from;
To = to;
}
private Person Guest;
private DateTime From;
private DateTime To;
}
вярно
public class TimeInterval { public TimeInterval(DateTime from, DateTime tol) { // We shoud validate From < To From = from; To = to; } }
public DinnerTable(Person guest, DateTime from, DateTime to) { Guest = guest; Interval = new TimeInterval(from, to); }
Откриване
[X] Полуавтоматичен
Откриване въз основа на кохезионни модели е налично за няколко линтера.
Етикети
- Кохезия
Заключение
Групово поведение на правилното място и скри примитивните данни.
Връзки
Повече информация
- „Гуру по рефакторинг“
- Уикипедия
Кредити
Снимка от Dynamic Wang на Unsplash
Сърцето на софтуера е способността му да решава проблеми, свързани с домейна, за своя потребител. Всички други функции, колкото и жизненоважни да са, поддържат тази основна цел.
Ерик Еванс
Тази статия е част от поредицата CodeSmell.