Поради щодо розробки веб-додатків із 40-річним терміном експлуатації


73

Сценарій

Наразі я є окремим проектом охорони здоров’я, головна вимога якого - збирати дані з невідомими атрибутами, використовуючи форми, створені користувачем, від постачальників медичних послуг. Друга вимога полягає в тому, що цілісність даних є ключовою і що програма буде використовуватися протягом 40 років. Наразі ми переносуємо дані клієнта за останні 40 років з різних джерел (Paper, Excel, Access тощо) до бази даних. Майбутні вимоги:

  • Управління робочим потоком форм
  • Графік управління формами
  • Управління на основі безпеки / ролі
  • Двигун звітності
  • Підтримка мобільних пристроїв / планшетів

Ситуація

Тільки через 6 місяців поточний (за контрактом) архітектор / старший програміст застосував "швидкий" підхід і створив погану систему. База даних не нормалізується, код з'єднаний, яруси не мають цільового призначення, і дані починають пропадати, оскільки він сконструював частину бобів для виконання "видалень" у базі даних. База коду є надзвичайно роздутою і є завдання лише для синхронізації даних, оскільки база даних не нормалізується. Його підхід був покладатися на резервні завдання для відновлення відсутніх даних і, здається, не вірить у повторний факторинг.

Представивши мої висновки прем'єр-міністру, архітектор буде видалений, коли його контракт закінчиться. Мені було доручено перепрофілювати цю програму. Моя команда складається з мене та одного молодшого програміста. Інших ресурсів у нас немає. Нам було надано 6-місячне заморожування вимог, в якому ми можемо зосередитись на відновленні цієї системи.

Я запропонував використовувати систему CMS на зразок Drupal, але з міркувань політики в організації клієнта система повинна бути побудована з нуля.

Це перший раз, коли я буду проектувати систему з тривалістю життя 40+. Я працював лише над проектами з 3-5-річним терміном життя, тому ця ситуація дуже нова, але захоплююча.

Запитання

  • Які міркування щодо дизайну зроблять систему більш «надійною в майбутньому»?
  • Які питання слід задати клієнтові / прем'єр-міністру, щоб зробити систему більш «майбутнім доказом»?

59
Майбутня перевірка - це одне, але я вважаю, що клієнт повинен запитати програмне забезпечення, яке, як очікується, має тривалість життя, що на 10x-20x довше, ніж поточна історія мобільних / планшетних обчислень або на 5x-8x довше, ніж поточна історія мови у використанні ... невиправдано оптимістично ставиться до стабільності даної моделі обчислень.

31
проект "майбутнього доказу" 40 років - звучить як вправність у марності.
whatsisname

10
Щоб повністю заповнити вимогу використання бази даних протягом наступних 40 років, я б це все виклав на папері. Папір добре зарекомендувала себе, тоді як цифрове зберігання здебільшого довело, як швидко втратити багато даних. (але, звичайно, зберігати всі дані, які слід знищити)
Пітер Б

34
Вони дають двом розробникам контрактів 6 місяців для створення цієї системи? Збір років про застарілі дані та передбачення нових вимог десятиліттями у майбутнє? Якщо ви вже не йдете від проекту, починайте бігати. Це набагато більше, ніж двоє людей можуть впоратися в будь-який близький до відведеного часу. Клієнт має абсолютно необґрунтовані очікування та не бажає залучати належні ресурси до проекту.
Sean McSomething

12
6 місяців на 2 людини, щоб створити архітектуру та реалізувати програму, яка потребує 40+ років? Неважливо, наскільки ви хороші, це звучить як налаштування на збій. Якщо ви не можете переконати вашу організацію, як це нерозумно, то я б запропонував вам якнайшвидше почати шукати іншу роботу.
dsw88

Відповіді:


132

Дані King

Я вважаю, що трохи нерозумно очікувати, що веб-додаток до 2013 року все ще буде запущено та працює у 2053 році. Технології будуть змінюватися. Платформи збираються і йдуть. HTML до цього часу може бути вигадливою пам'яттю. Але ваші дані все ще будуть.

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

Що стосується фактичних застосувань, то, напевно, ваша компанія тут вірна, маючи директиву «побудувати з нуля». Я підтримую декілька 10-річних веб-додатків, і я дуже радий, що вони не заблоковані в існуючих системах CMS 2003 року. Вони використовують домашні, дуже прості рамки. Я думаю, що для такого подібного вам краще скористатися дуже базовою основою, яку ви спеціально створюєте для потреб проекту.

Але реальність така, що протягом 40 років компанія (сподіваємось) буде робити чимало послуг на передній та задній частині, щоб адаптуватися до платформ, що розвиваються. З огляду на це, я б орієнтувався на 5-10-річний термін експлуатації для окремих програм, орієнтованих на користувачів.


13
"ми не будемо використовувати цей код через 40 років!" саме тому для початку з’явилася помилка Y2K. Очікувати заміни коду - це лише погана практика.
DougM

71
"Помилка" Y2K була проблемою даних - 2 цифри замість 4 зберігалися. Ось чому я пропоную зосередитись на даних.
GrandmasterB

24
Влучне зауваження. Маючи це на увазі, якщо хтось дійсно очікує, що їхні дані (а можливо, і база даних) будуть використані 40+ років відтепер, можливо, найкраще спроектувати базу даних якомога менше функцій, що стосуються конкретного постачальника. Кому доведеться розплутувати / переписати весь ваш код, який покладається на спеціальний Oracle / MS-SQL / будь-яку функціональність 20 років з цього моменту, вам не порадує. ;)
FrustratedWithFormsDesigner

4
Це солідна порада. Є ще багато програм Cobol, які спочатку були написані 20-30 років тому. Хоча технологія продовжується, якщо ваші дані та об'єктна модель є надійними, а дані залишаються цікавими, ваш код залишатиметься у використанні в тій чи іншій формі.
Боббл

7
Оскільки хтось виховував Y2K: пам’ятайте про UNIX Y2K ( en.wikipedia.org/wiki/Year_2038_problem ).
MrFox

40

Ми виробляємо програмне забезпечення, яке використовується у виплаті клієнтів вже понад 20 років. Кодова база перевищила кілька поколінь засобів управління джерелами. Наше програмне забезпечення вражає всі ваші кулі, за винятком планшетного ПК.

Деякі проблеми стосуються ESIGN та UETA . Наші юристи вважають, що нам потрібно зберігати електронні записи, що читаються, як мінімум 10 років. Для документів, які зберігаються цілком, ви повинні дивитися в PDF / A .

Що стосується вашої бази даних, не переживайте над нормалізацією. Натомість ви повинні турбуватися про реєстрацію всього та наявність таблиць аудиту, які відстежують зміни / видалення даних. Оновлюючи версії, плануйте паралельно тестувати нові версії на достатній час, щоб перенести дані. Це тестування нових версій включає також нові операційні системи - у нас протягом багатьох років були неприємні сюрпризи. Зберігайте інсталяційний носій та ліцензійні ключі на випадок, якщо потрібно виконати відкат. Тестові резервні копії. Якщо ви збираєтеся серіалізувати об'єкти для зберігання в базі даних, зробіть це як XML замість серіалізації, наданої вашою розробкою.

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

Щодо кодової бази, переконайтеся, що у вашому коді є коментарі. Переміщення з однієї системи контролю версій на іншу майже завжди втратить ваші коментарі при реєстрації. Я прихильник називання тестових одиниць після специфікацій та помилок. Таким чином, якщо тест одиниці Test_Bug_1235 зламається, то ви знаєте, що і де відслідковувати те, що він повинен бути тестуванням. Це не так "сексуально", як називання ваших тестів, Check_File_Save_Networked_Drivesале такий вид тесту важко відстежити на технічні характеристики, вимоги або помилки Test_requirement_54321_case_2.


Дякуємо, що поділилися своїм досвідом. Мені, безумовно, потрібні деякі з тих, що зроблені, оскільки нинішній архітектор не коментував жодного його коду і не надав нам жодної документації. Це був кошмар логістики, але я сподіваюся це змінити. PDF / A - це те, що я обов'язково буду досліджувати, оскільки це потрібне нашому клієнту - особливо для аудиту. Ще раз дякую за пораду!
Піт

4
Це вичерпна і продумана відповідь. Ви зазначаєте кілька важливих моментів щодо важливості аудиту, як щодо зміни даних, так і щодо якості даних, а також з юридичних причин, за якими слід відстежувати, хто переглядає дані, див. HIPAA . Якщо ваше програмне забезпечення буде використовуватись у Сполучених Штатах, тоді у вас будуть певні обмеження та вимоги безпеки, які вимагаються цим законодавством.
maple_shaft

3
... принаймні SVN для git можливий з повною історією фіксування.
honoela

Не тільки SVN до Git, але й більшість систем, що не належать до кам’яного віку, хоча такі старі, як CVS, часто потребують ручного налаштування за допомогою репозиціонера. Більшість експортерів також випромінюють потік швидкого експорту, який є досить простим, щоб його можна було імпортувати і не-Git VCSes.
grawity

2
Я пропоную вам не називати тести лише за номерами відстеження помилок та специфікацій, як: а) номери помилок, як правило, починаються з 0 (оскільки, здається, нікому не подобається> 5-значне число & програмне забезпечення для відстеження помилок обмінюється; б) специфікації мають тенденцію загубитися (потворно, але це трапляється досить часто); в) Сексуальні імена часто дають зрозуміти досить. Хоча, посилання на специфікацію / ідентифікатор помилки - це завжди хороша ідея.
Бернштейн

29

Замість того, щоб намагатися з'ясувати, як ця програма все ще працює 20 років відтепер, я думаю, вам слід витратити свої півроку на виправлення проблем, які ви виявили, що оригінальний архітектор викликав, створив розважливу, надійну архітектуру та рухатися вперед звідти.

Часткова денормалізація бази даних не обов'язково є зовсім несподіваною в медичних умовах. Деякі частини медичних баз даних мають характеристики, які добре підходять для моделі EAV (Entity / Attribute / Value) .


2
@ user2708395 Будьте уважні до дизайну EAV, оскільки це може бути не найефективнішим або простим запитом. Це також не може бути вдалим вибором для звітності.
maple_shaft

@maple_shaft Про це я і читав. Я буду дуже обережним з цим, коли почув деякі страшилки, де люди їх переживають. Дивлячись на використання деякої бази звітів, щоб спростити запит, оскільки клієнт генерує звіти лише раз на місяць.
Піт

4
@maple_shaft: Зазвичай дані витягуються зі схеми / бази даних EAV в окрему схему / базу даних звітів.
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Це прекрасний момент. Гнучкість у вашій схемі, яку надає EAV, не має собі рівних, але це, безумовно, не срібна куля за всю наполегливість.
maple_shaft

Хоча я дозволю, що EAVs можна використовувати, ви будете здивовані відносинами, які зможете знайти. Однак, додаткові атрибути, які часто з'являються для таких галузей (охорона здоров'я, відносини з клієнтами тощо), повинні кудись піти ... Просто переконайтеся, що підкріпіть це таблицею з атрибутами, щоб отримати канонічний список атрибути.
Завод-Муза

13

Відповідь з прямої точки зору:

Не слухайте всіх, хто говорить, що цього не можна зробити, тому що експериментальний веб-сервіс Державного університету Сан-Франциско, який я написав у 1996 році, нарешті, вийшов на небо в Інтернеті пару років тому, і ніколи не знадобилося жодного виправлення сумісності браузера в той час. ; це майже половина вашої 40-річної мети. І цей інтерфейс на основі JavaScript, який я створив у 1998 році для проекту Стенфордського інституту досліджень, через кілька років був замінений чимось швидким, але немає причин, що початковий інтерфейс не міг би працювати сьогодні з незначними виправленнями сумісності.

Трюк полягає в тому, щоб ваш додаток використовував лише широко підтримувані стандарти W3C / ECMA і чистий дизайн був під вашим контролем. Хоча багато веб-додатків, написаних за модною технологією епохи 90-х років, не спрацюють добре або взагалі сьогодні, веб-додатки епохи 90-х років, написані відповідно до основних стандартів, все ще є. Вони можуть виглядати пасе, але вони працюють.

Ціль тут не в тому, щоб написати веб-додаток, який працюватиме на їхньому сервері і залишатиметься там протягом 40 років, без того, щоб хтось знову його торкався. Це створити фундамент, який все ще може бути використаний десятиліттями вниз, який може перерости в підтримку нових функцій без необхідності перебудовуватися з нуля.

Перш за все, ви повинні кодувати до офіційних стандартів і лише до офіційних стандартів. Ніякі функції JavaScript не є частиною ратифікованого стандарту ECMAScript; ES5.1 - це поточна версія, і вона, як правило, підтримується, тому безпечно для націлювання. Так само хороші поточні версії HTML5, CSS та Unicode. Немає експериментальних функцій JavaScript, CSS3 або HTML (ті, що мають префікси постачальника або без 100% узгодження між браузерами). І жодних хакерських можливостей щодо сумісності. Ви можете почати використовувати нову функцію, як тільки вона буде в стандарті, і всі підтримують її без префіксів.

Підтримка ES5 означатиме скасування IE8 або попередньої версії, що я все одно пропоную, оскільки для нього потрібні хакерські програми, які будуть непридатними через пару років. Я б запропонував жорсткий режим ES5 для найкращого шансу на довголіття, який фактично встановлює базову сумісність браузера на IE10 та останніх версіях усіх інших . Ці браузери також мають вбудовану підтримку багатьох функцій перевірки форм HTML5 та заповнювачів, що буде корисним дуже довго.

Нові видання ECMAScript підтримують сумісність із старими версіями, тому буде набагато простіше прийняти майбутні функції, якщо ваш код буде написаний відповідно до діючих стандартів. Наприклад, класи , визначені з допомогою наступаючого classсинтаксису будуть повністю взаємозамінні з класами , визначених з поточним constructor.prototypeсинтаксисом. Тож за п’ять років розробник може переписати класи у формат ES6 по кожному файлу, не порушуючи нічого, якщо, звичайно, припустити, що у вас також є хороші одиничні тести.

По-друге, уникайте модних рамок додатків JavaScript, особливо якщо вони змінюють спосіб кодування програми. Хребтики були у всіх гнів, потім були SproutCore і Ember, і тепер Angular є основою, яку всі люблять просувати. Вони можуть бути корисними, але вони також мають щось спільне: вони часто ламають програми та вимагають зміни коду, коли виходять нові версії та їх довговічність сумнівна. Я нещодавно оновив додаток Angular 1.1 до 1,2, і зовсім небагато довелося переписати. Так само для переходу з хребта 2 на 3 потрібно багато змін HTML. Стандарти є повільними з причини, але ці рамки швидко рухаються, і періодично руйнуються речі - це вартість.

Крім того, нові офіційні стандарти часто залишають застарілі рамки застарілими, і коли це відбувається, ці рамки або мутують (із порушеннями змін), або залишаються позаду. Ви знаєте, що станеться з усіма конкуруючими бібліотеками обіцянок у світі, коли ECMAScript 6 буде ратифікований і всі браузери підтримують його стандартизований клас Promise? Вони застаріють, і їх розробники перестануть оновлювати їх. Якщо ви вибрали правильний фреймворк, ваш код може адаптуватися досить добре, і якщо ви погано здогадалися, ви подивитесь на основний рефакторинг.

Тож якщо ви думаєте скористатись сторонніми бібліотеками чи рамками, запитайте себе, як важко буде їх видалити в майбутньому. Якщо це рамка на зразок Angular, яку ніколи не можна буде видалити, не будуючи додаток з нуля, це хороший знак, що він не може бути використаний в 40-річній архітектурі. Якщо це сторонній віджет календаря, який ви абстрагували певним спеціальним програмним забезпеченням, його заміна займе кілька годин.

По-третє, надайте їй гарну, чисту структуру додатків. Навіть якщо ви не використовуєте рамки програми, ви все одно можете скористатися інструментами для розробників, побудувати сценарії та гарний чистий дизайн. Я особисто прихильник управління залежностями Closure Toolkit, оскільки він легкий, а його накладні витрати повністю видаляються після створення вашого додатка. LessCSS та SCSS також є чудовими інструментами для організації ваших таблиць стилів та створення таблиць стилів CSS на основі стандартів для випуску.

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

Ви також повинні дотримуватися порад W3C і повністю зберігати презентаційну інформацію від свого HTML. (Це включає чіти, як надання елементів імен класів презентаційних класів, таких як "великий зелений текст" та "двоколонний".) Якщо ваш HTML - семантичний, а CSS - презентаційний, буде набагато простіше підтримувати та адаптувати його до нових платформ у майбутньому. Також буде простіше додати підтримку спеціалізованих веб-переглядачів для незрячих або інвалідів.

По-четверте, автоматизуйте свої тести та переконайтесь, що ви майже покриті. Пишіть одиничні тести для кожного класу, незалежно від сервера чи JavaScript. На передньому кінці переконайтеся, що кожен клас працює відповідно до своїх специфікацій у кожному підтримуваному браузері. Автоматизуйте ці тести у свого робочого бота для кожного вчинення. Це важливо як для довговічності, так і для надійності, оскільки ви можете ловити помилки рано, навіть коли сучасні браузери їх затьмарюють. Як рамки тестування на базі JSUnit, засновані на Жасмін та Google Закриття, хороші.

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

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


1
Хороша порада щодо "JS фреймворків" стосується також і резервних рамок. Дивіться поради дядька Боба Мартіна .
Брайан Лоу

Чесно кажучи, я був би обережний JS повністю з огляду на контекст. Я можу уявити, що HTML вже близько 40 років; Я б не покладався на те, який перетворювач використовується тоді, щоб обов'язково підтримувати JS так, як ви хочете (і вважайте, що ваш JS можливо робить неправильну справу, оскільки бажаний пристрій виводу може бути немислимо іншим).
Еймон Нербонна

10

Залишаючи осторонь необгрунтованих очікувань свого клієнта та зосереджуючись на питаннях дизайну, я б не пішов на 40 років, але проблема, яка, здається, у вас, у довгостроковій еволюційності, - саме для цього створено REST . Цим я справді маю на увазі REST як стиль архітектури, а не розроблену мовою buzzword, що так часто асоціюється з цим терміном.

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

Однак я вважаю, що більшість людей просто помиляються, що проектувати прості речі потрібно просто. Насправді зусилля, необхідні для конструювання чогось, обернено пропорційні простоті результату. По мірі архітектурних стилів REST дуже простий.

REST - це розробка програмного забезпечення в масштабах десятиліть : кожна деталь покликана сприяти довговічності програмного забезпечення та незалежній еволюції.

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724

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

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


Це дуже корисно! Дякую. Я робив ще кілька досліджень щодо REST, і я можу побачити, що величезні переваги від цього та як його можна розширити за межі методів HTTP. Це досить потужні речі, і я дуже радий працювати з цим. Дякуємо також за посилання! Я просто хочу, щоб у мене було більше часу!
Піт

9

Після того, як я прочитав питання та інші (дуже добре продумані) відповіді, я подумав, що також залишу свої два центи. Примітка. Мені взагалі не доводиться підтримувати жодне дійсно старе додаток / програмне забезпечення. Я використовую як довідник - власний веб-додаток хобі, що не працює, який захоплює деякі відкриті урядові дані, аналізує та відображає їх у різних форматах. Додаток розпочався як проект, де я не був один і де уряд лише оголосив, що якось запропонує ці дані. Тож було зрозуміло, що багато чого зміниться з часом. І вони зробили. Про що я дізнався:

  • Розбийте речі в міні-додатках. Кожен повністю може виконати своє завдання самостійно. Це робить вимикання одного шматка дуже швидким, дуже безпечним і дуже простим. І коли вам доведеться повернутися назад, не дуже важко обійти, чому все відбувається і як вони стаються. Якщо вам або комусь іншому доведеться згодом щось змінити, простіше замінити одну частину, ніж цілий набір речей.
  • Отримайте міцний постійний проміжний / -шар, який використовується для зв'язку між різними частинами. У цьому випадку я використовував JSON, але XML, ini або подібні стандарти також будуть добре. Це легко повторити і може бути перетворено майже на що завгодно. Усі перевірені стандарти, які протримаються досить довго. Навіть якщо основні дані та / або модель зберігання зміниться. Кожен із додатків може використовувати власне сховище даних для своєї конкретної задачі. Це робить кількість відсканованих даних для завдання меншою, тому простіше в обробці та обслуговуванні та легше обмінюватися.
  • Не турбуйтеся про рішення мови програмування. Ці зміниться з часом. Просто переконайтеся, що ви використовуєте мову, якою вам зручніше, або яка найкраще відповідає завданням.
  • Переконайтесь, що ваше зберігання даних "горизонтально масштабоване" і що легко вставити додаткові модулі зберігання.
  • Отримайте загальну точку (в моєму випадку це URI), де міні-додатки викликаються та / або обмінюються даними.

Підводячи підсумок: Найбільше мені найбільше цікаво - це розділення проблем та обмінними можливостями частин, призначених для виконання завдань. Ви просто знаєте, що через 40 років (навіть через 5 чи 10) апаратне забезпечення, інтерфейси, сховище тощо дуже зміниться. А пізніше розробникам доведеться реагувати на ці зміни та обмінюватися частинами вашої програми, будь то контейнер даних або частини користувальницького інтерфейсу.


1
Дуже хороша порада! Дякую. Я безумовно згоден з розділенням завдань та створенням міні-додатків. Поточне складання всього поєднане, що ускладнює інтеграцію нових функцій та вимог. Я сподіваюся перейти на RESTful інтерфейс і використовувати JSON. Не скаржитися, але коли я вперше приєднався, офшорний архітектор не дозволив мені використовувати JSON. Тож я просто сказав йому, що я передаю "рядки" і покинув частину, що ці рядки були у форматі JSON. :)
Піт

7

Щоб зробити речі максимально «стійкими до майбутнього», плануйте зміни. Тобто постарайтеся, щоб не оптимізувати нічого іншого, крім здатності легко змінюватися. Таким чином, ніякої нормалізації, ніякої суворої валідації та безперебійного зчеплення мудрості.

  • Використовуйте основні технології з відкритим кодом. Для даних системи із закритим кодом є основним джерелом ризику, оскільки не можна планувати, на якій компанії підуть або змінювати стратегії, беручи з собою весь доступ до даних. Також незначні проекти з відкритим кодом без активного співтовариства також втрачають підтримку.

  • Використовуйте базу даних NoSQL без схем. Види неструктурованих даних, що використовуються, майже не виходять з підручника для сховища документів, як MongoDB. Традиційні реляційні бази даних та їх нормалізація добре, коли ви знаєте, як будуються ваші дані, але це справді вигадка, особливо тут. Витрати на зміну схеми в RDBS з часом збільшуються та збільшуються. Знайте, що яка б структура не була обрана зараз, це врешті-решт зміниться.

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


На жаль, використання бази даних без схем не означає, що реструктуризація та реорганізація даних має нульову вартість.
Алекс Д

4

Гаразд, тому я збираюся сказати деякі речі, які, ймовірно, будуть досить непопулярними, але дотримуйтесь мене тут.

Оскільки це ваш перший проект, де дані та / або додаток має тривати 20 років, і ви є тим, хто веде проект, вам потрібно зробити крок назад і подумати про те, які шанси на успіх цього проекту є . Тому що вони в основному поруч із нулем.

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

Очікувати, що двоє людей (одна з яких має титул молодшого розробника) побудують щось з нуля, яке, як очікується, триватиме 40 років, можливо, не вдасться. Має бути команда людей, багато хто має досвід роботи з такими великими проектами, які працюють над дизайном даних, дизайном API та дизайном додатків. Щось подібне - це не проект на 2 людини.

Бажаючи пов'язати проект із чимось на зразок Drupal, показує, чому проект потребує людей, які звикли працювати над такими проектами. Ви не хочете прив'язувати додаток до всього, що може вийти зі стилю протягом декількох років. Якщо ви це зробили, знайти когось для роботи над системою через 5-10 років могло б отримати дуже складно дуже швидко.

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


3

Програмі не потрібно переживати 40 років без еволюції. Але, оскільки це було б або повинно будуватися з нуля, воно все одно може «функціонувати».

Найголовніше - це «архітектура даних», яка забезпечує певну стабільність та управління, а також розширюваність.

Ми розробили архітектуру даних та систематику даних, які могли б майже дожити до кінця людства, але все ще бути розширюваними. Ви можете знайти справжню особу ТАКСОНОМІЇ / ДАНИХ АРХИТЕКТУРИ, щоб зробити це за вас.


Я думаю, що провал цього проекту був з самого початку, це те, що він розпочався без належного архітектора даних. Це, безумовно, дуже обґрунтована порада.
Піт

Час зателефонувати та найняти мене :) Робота з управлінням та систематикою даних для деяких компаній, коли ми говоримо :)
Alex S

3

Тут головне - зосередитись на базі даних (як уже сказано декілька). Це повинно бути узгодженим і повністю описувати операцію. Потрібно зростати в міру зміни операції. Якщо змінити непросто, то він застаріє і це поцілунок смерті. Решта відносно менш важливі.

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

Компанія, в якій я працював до виходу на пенсію, працює над системою, яка написана з нуля і майже 25 років постійно зростала, і охоплює практично всі аспекти середнього роздрібного торговця. Важливими аспектами цієї системи є:

  • Інтеграція життєво важлива.
  • База даних повинна бути настільки ж коректною і зрозумілою як ІТ, так і іншим співробітникам, тому потрібно майже параноїдальний акцент на іменування. У нас є таблиці з визначеними мнемоніками, які потім об'єднуються для складання імен таблиць і полів, і всі «коди» так само називаються константами і зберігаються в структурі таблиць EAV.
  • Ми вклали ділову логіку в тригери бази даних. Спочатку це боляче і вимагає додаткової роботи над передачею повідомлень про помилки клієнтам та дозволом гнучко змінювати тригери, не блокуючи всю таблицю в деяких системах, але це швидко стає масовою економією часу і змушує базу даних бути набагато правильнішою ніж інакше.
  • Припустимо, що ви будете зберігати принаймні довідкові таблиці (в ідеалі всі найшвидші та найменш важливі транзакції) протягом життя системи, навіть коли "видалено", щоб ваші посилання були правильними.
  • Через вищезазначене слід забезпечити розмір будь-яких унікальних ідентифікаторів та номерів транзакцій на довгий термін. (Я спочатку жартома припускав, що вони повинні тривати, поки я не вийду на пенсію).

2

Я хотів би запропонувати використовувати сорсинг подій і команд і запитів відповідальності сегрегацію . Це головним чином тому, що єдине, в чому ви можете бути впевнені - це події, які вже з’явилися. Можуть прийти нові типи подій. Тож навіть якщо ви ставите важкі думки до моделі, то впевнені, що це застаріє. Міграція всіх даних із кожним випуском може бути неможливою. Тож найкраще - мати модель, яка відповідає вашим поточним потребам і яка обчислюється з уже записаних подій кожного разу, коли вам це потрібно, а потім передавати події, обчислені з поточного стану цієї моделі.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.