Тестова розробка (TDD) - це не дизайн. Це вимога, яка впливає на ваш дизайн. Так само, як якщо б від вас вимагали безпеку ниток, це не дизайн. Знову ж таки, це вимога, яка впливає на ваш дизайн.
Якщо ви радісно ігноруєте всі інші проблеми дизайну і релігійно дотримуєтесь правил TDD, не звинувачуйте TDD, коли ваш код перетворюється на лайно. Це буде дратівливе лайно, але це буде лайно.
Одна приємна річ, що стосується тест-лайна, це те, що це ремонтопридатне лайно, тому для деяких людей це досить добре. Ми будемо фантазувати лише тоді, коли буде потрібно. Інші ненавидять це і звинувачують у цьому TDD. Ні. Це твоя справа.
Дизайн, керований доменом (DDD) - це те, що ви робите перед циклом червоного зеленого рефактора TDD.
DDD - це намагання створити та зберегти простір у коді, де експерт із домену, який значною мірою не звертає уваги на деталі системи, може зрозуміти, як керувати системою. Це робиться шляхом абстрагування та моделювання проблемної області звичним способом.
Система DDD може мати архітектуру, яка виглядає приблизно так:
Ця архітектура DDD має багато назв: Очистити , Лук , Шестикутник тощо
Ось відключення, яке я бачу у багатьох людей, коли вони дивляться на цю конструкцію. Це не конкретно. Я можу слідувати цій конструкції і ніколи не писав нічого, що ви бачите на схемі. Я бачу, як інші наполягають на тому, що повинен бути об'єкт використання або клас сутностей. Що це таке - це набір правил, які розповідають, з ким можна спілкуватися та як.
Це воно. Дотримуйтесь правил цього дизайну, і ви зможете роздути своє маленьке серце. TDD байдуже, з ким ти розмовляєш. Дбає про те, що все, що щось робить, може бути доведено, що воно працює або не натискає кнопку. Ні, щось десь порушено. Це точно говорить вам, що зламано.
Ще нечітко? Подивіться на діаграму Controler
- Use Case Interactor
- Presenter
у правому нижньому куті. Ось три конкретні речі, що спілкуються між собою. Звичайно, це DDD, але як тут додати TDD? Просто знущайтеся з конкретних речей. Ведучий повинен отримувати інформацію. PresenterMock
Клас був би хороший спосіб перевірити , що це те , чого ви очікували отримати. Передайте і драйв , як якщо б ви були і у вас є хороший спосіб для модульного тестування , так як насмішка скаже вам , якщо він отримав те , що ви очікували отримати.Use Case Interactor
PresenterMock
Use Case Interactor
Controller
Use Case Interactor
Добре подивіться на це. TDD задоволений, і нам не довелося піти з нашим дизайном DDD. Як це сталося? Ми почали з добре відокремленого дизайну.
Якщо ви використовуєте TDD для приводу дизайну (не просто D evelopment), ви отримуєте дизайн, який відображає зусилля, які ви вкладаєте в нього. Якщо це тобі хочеться прекрасного. Але це ніколи не було для чого TDD. Те, що в кінцевому підсумку не вистачає, звичайно, не винна TDD.
TDD не про дизайн. Якщо вам доведеться внести зміни в дизайн TDD, у вас є більші проблеми, ніж тестування.