Проблема

  • Низкая сплоченность
  • Связь
  • Ремонтопригодность
  • Читабельность

Решение

  1. Определение методов, связанных с конкретными группами атрибутов.
  2. Сгруппируйте эти методы вместе.
  3. Разбейте исходный класс на более мелкие, более целенаправленные объекты на основе этих кластеров.
  4. Замените существующие ссылки новыми объектами.

Примеры

- DTO

- Денормализованные строки таблицы

Образец кода

Неправильный

class ExcelSheet (
    val filename: String,
    val fileEncoding: String,
    val documentOwner: String,
    val documentReadPassword: String,
    val documentWritePassword: String,
    val creationTime: LocalDateTime,
    val updateTime: LocalDateTime,
    val revisionVersion: String,
    val revisionOwner: String,
    val previousVersions: List<String>,
    val documentLanguage: String,
    val cells: List<Cell>,
    val cellNames: List<String>,
    val geometricShapes: List<Shape>,
)

Верно

class ExcelSheet (
    val fileProperties: FileProperties,
    val securityProperties: SecurityProperties,
    val datingProperties: DocumentDatingProperties,
    val revisionProperties: RevisionProperties,
    val languageProperties: LanguageProperties,
    val content: DocumentContent,

)

// The object now has fewer attributes, resulting in improved
// testability.
// The new objects are more cohesive, more testable, and lead to fewer
// conflicts, making them more reusable. Both FileProperties and
// SecurityProperties can be reused for other documents. Additionally,
// rules and preconditions previously found in fileProperties will be
// relocated to this object, resulting in a cleaner ExcelSheet
// constructor.

Заключение

Раздутые объекты слишком много знают и их очень трудно изменить из-за сплоченности.

Разработчики часто меняют эти объекты, поэтому они вызывают конфликты слияния и являются частым источником проблем.

Надеюсь, вам понравилось это путешествие и вы узнали что-то новое. Если вы хотите быть в курсе моих последних мыслей и идей, не стесняйтесь подписаться на мою информационную рассылку. Вы также можете найти меня в LinkedIn или Twitter. Оставайтесь на связи и продолжайте общение!

Кредиты

Первоначально опубликовано на https://yonatankarp.com.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord. Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.