Autumn SALE

Відокремлення інтерфейсу

Також відомий як: Extract Interface

Проблема

Декілька клієнтів користуються однією і тією ж частиною інтерфейсу класу. Або в двох класах частина інтерфейсу виявилася спільною.

Рішення

Виділіть цю спільну частину в свій власний інтерфейс.

До
Extract Interface - Before
Після
Extract Interface - After

Причини рефакторингу

  1. Інтерфейси бувають корисні, коли один клас може відігрувати різноманітні ролі в залежності від ситуації. Використайте відокремлення інтерфейсу щоб явно позначити кожну з ролей.

  2. Ще одна слушна нагода виникає, коли потрібно описати операції, які клас виконує на своєму сервері. Якщо в майбутньому передбачається дозволити використання серверів декількох видів, усі вони повинні реалізовувати цей інтерфейс.

Корисні факти

Є деяка схожість між відокремленням суперкласу і відокремленням інтерфейсу.

Відокремлення інтерфейсу дозволяє виділяти тільки спільні інтерфейси, але не спільний код. Іншими словами, якщо в класах знаходиться дублюючий код, то, застосувавши відокремлення інтерфейсу, ви ніяк не позбавитеся від цього дублювання.

Проте, цю проблему можна зменшити, застосувавши відокремлення класу для розміщення поведінки, що містить дублювання, в окремий компонент і делегування йому усієї роботи. У випадку, якщо об’єм спільної поведінки виявиться досить великим, завжди можна застосувати відокремлення суперкласу. Звичайно, це навіть простіше, але пам’ятайте, що при цьому ви отримуєте тільки один батьківський клас.

Порядок рефакторингу

  1. Створіть порожній інтерфейс.

  2. Оголосіть спільні операції в інтерфейсі.

  3. Оголосіть потрібні класи, які будуть реалізовуюти цей інтерфейс.

  4. Змініть оголошення типів в клієнтському коді так, щоб вони використовували новий інтерфейс.