Мій друг працює над невеликою компанією над проектом, якого б ненавиджу кожен розробник: на нього тиснуть, щоб випустити якомога швидше, він єдиний, хто, здається, хвилює технічну заборгованість, у замовника немає технічного досвіду тощо.
Він розповів мені історію, яка змусила мене задуматися про доцільність моделей дизайну в таких проектах. Ось історія.
Нам довелося відображати продукти в різних місцях на веб-сайті. Наприклад, менеджери контенту можуть переглядати продукти, але також і кінцевих користувачів або партнерів через API.
Іноді в продуктах бракувало інформації: наприклад, купка з них не мала жодної ціни, коли продукт був створений, але ціна ще не була вказана. Деякі не мали опису (опис є складним об'єктом з історією модифікації, локалізованим вмістом тощо). Деякі бракували інформації про відвантаження.
Надихнувшись своїми останніми читаннями про дизайнерські шаблони, я подумав, що це чудова можливість використовувати магічний візерунок Null Object . Так я це і зробив, і все було гладко і чисто. Треба було просто зателефонувати,
product.Price.ToString("c")
щоб показати ціну, абоproduct.Description.Current
показати опис; не потрібні умовні речі. Поки одного разу зацікавлена сторона не попросила відобразити її по-різному в API, маючиnull
JSON. А також по-різному для контент-менеджерів, показуючи "Не визначено ціну [Змінити]". І мені довелося вбити мого улюбленого зразка Null Object, бо в ньому вже не було потреби.Таким же чином, мені довелося видалити кілька абстрактних заводів і кількох будівельників, я в кінцевому підсумку замінив свою прекрасну модель фасаду прямими та потворними дзвінками, тому що основні інтерфейси змінювалися двічі на день протягом трьох місяців, і навіть Сінглтон залишив мене коли вимоги говорили про те, що відповідний об'єкт повинен бути різним залежно від контексту.
Більше трьох тижнів роботи полягало в додаванні дизайнерських моделей, а потім розриваючи їх через місяць, і мій код нарешті став достатньо спагетті, щоб його неможливо було підтримувати ніким, включаючи мене. Чи не було б краще ніколи не використовувати ці візерунки в першу чергу?
Дійсно, мені довелося працювати над тими проектами, де вимоги постійно змінюються, і їх диктують люди, які насправді не мають на увазі згуртованості чи узгодженості продукту. У цьому контексті не має значення, наскільки ви спритний, ви прийдете з елегантним рішенням проблеми, а коли нарешті її реалізуєте, ви дізнаєтесь, що вимоги змінилися настільки різко, що ваше елегантне рішення не підходить не довше.
Яке було б рішення у цьому випадку?
Не використовуючи жодних моделей дизайну, перестаньте думати і писати код безпосередньо?
Було б цікаво зробити досвід, коли команда пише код безпосередньо, а інший думає двічі, перш ніж набрати текст, ризикуючи викинути оригінальний дизайн через кілька днів: хто знає, можливо, обидві команди мали б той же технічний борг. За відсутності таких даних я б лише стверджував, що це не правильно вводити код без попереднього роздуму під час роботи над проектом за 20 чоловік на місяць.
Зберігайте модель дизайну, яка вже не має сенсу, і намагайтеся додати більше моделей для новоствореної ситуації?
Це теж не здається правильним. Шаблони використовуються для спрощення розуміння коду; покладіть занадто багато шаблонів, і код стане безладом.
Почніть думати про новий дизайн, який охоплює нові вимоги, а потім повільно переробляти старий дизайн на новий?
Як теоретик і той, хто віддає перевагу Agile, я повністю в цьому. На практиці, коли ви знаєте, що вам доведеться повертатися до дошки щотижня і переробляти велику частину попереднього дизайну, і що у замовника просто не вистачає коштів, щоб заплатити вам за це, а також не вистачало часу на очікування , це, ймовірно, не буде працювати.
Отже, якісь пропозиції?