Някои обекти са винаги заедно. Защо не ги разделим?

TL;DR: Накарайте сплотени примитивни обекти да пътуват заедно

проблеми

  • Лоша кохезия
  • Дублиран код
  • Сложност на валидирането
  • Четивност
  • Ремонтопригодност

Решения

  1. Извличане на клас
  2. Намерете малки предмети

Контекст

Тази миризма се сприятелява с примитивната мания.

Ако два или повече примитивни обекта са залепени заедно, с повтаряща се бизнес логика и правила между тях, трябва да намерим съществуващата концепция на „биекцията“.

Примерен код

погрешно

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.