iKonekt
Отворете ја конзолата

Одвојување

Границата што ја чува базата на податоци, не кодот

Секој CRM тврди дека е повеќекориснички (multi-tenant). Тврдењето е евтино; важно е кој слој ја држи линијата. Ако одговорот е „нашата апликација секогаш го додава точниот филтер“, тога гарантијата е само колку и најуморниот програмер што некогаш напишал барање.

iKonekt беше повеќекориснички од првата миграција, а не дограден подоцна, што звучи како фалење, а всушност е признание: доградувањето е речиси невозможно да се направи убедливо, и секој што пробал има приказна.

Одделноста живее во базата на податоци. Секоја од дваесет и шесте табели го носи tenant-от на кој припаѓа, а политиката што го проверува тоа се извршува при секое читање и секое запишување, целосно под апликацијата. Барање што ја заборава границата не враќа туѓи клиенти. Тоа не враќа ништо.

Безбедност на ниво на ред, наметната

Не е конвенција, не е правило во преглед на код. Базата одбива. Седумдесет и две политики, напишани една по една, а не генерирани — зашто генерираната политика е политика што никој не ја прочитал.

Композитни клучеви

Дете-записникот референцира tenant и родител заедно, како пар. Лут идентификатор од погрешна компанија не се разрешува — едноставно не е валидна референца.

Без стандарден tenant, никогаш

Барање без опсег не станува тивко барање за tenant нула. Фрла грешка пред да стигне до базата. Нема режим „unscoped“ што може да се заборави да се исклучи.

Грешката што не можеше да се објави сама

Додека се работеше на издвојувањето по закупници, повеќето грешки беа гласни. Дајте на две компании истиот домен на клиент и веднаш ќе добиете грешка во објектите на базата — со код за грешка и стек; поправите пред ручек.

Една не се спротивстави. Табелата со уредливи препишувања на промпти беше клучувана само по видот на промптот — не по вид и закупник. Втора компания што го уредува својот примерок тивко би го препишала оној на првата, со сосема валиден SQL, без грешка, без предупредување и без паднат тест. Се откри со читање на секој преостанат уникатен индекс по промена на клуч, еден по еден, од сомнение дека гласните имаат другари.

Го споменуваме затоа што тоа е честниот облик на оваа работа. Издвојувањето не е функција што ја вклучувате; тоа е навика да ги читате досадните делови од шемата со претпоставка дека нешто таму не се согласува со вас.

Тестовите, заради евиденција: 942, извршени врз база обновена од нула при секоја промена. Тие не се таму за да докажат дека дизајнот е паметен. Тие се таму затоа што начинот на откажување на овој дизајн е тивок, а тивките откажувања бараат некој да вика во ниво име.

Што издвојувањето и дава на обичен човек

  • Група може да води неколку компании од една инсталација, а продавач во една никогаш нема да види клиент од друга — не по правило, туку по конструкција.
  • Партнерска програма, збир промпти, барање врз клиент: сè е опсегнато по компания, така што конфигурацијата на еден закупник не може да стане на сите.
  • Барање за бришење се почитува во рамки на граница, а не врз заедничка куп, и тоа е она што овозможува да одговорите чесно.
  • И никој не мора да го памти ништо од ова. Тоа е поентата — гаранција што зависи од тоа да се памти не е гаранција.

Уште еден ред што не е за базите

Секој братски сервис во фамилијата држи свој именуван акредитив. Ништо не зборува со заеднички, па ниеден сервис не може случајно да дејствува како друг — мала дисциплина што дојде директно од тоа што некогаш имавме заеднички токен и не ни се допадна.

Тоа е истиот инстинкт како правилото за базата. Направете го погрешното невозможно, а не само обесхрабрено, и ќе го трошите вниманието на клиенти наместо на будност.

ГраницатаПод апликацијата
  • 126 табелиСекоја го носи својот закупник, со присилно вклучена проверка.
  • 272 правилаНапишани поединечно, така што секое е прочитано од човек.
  • 3942 тестовиВрз база обновена од нула, при секоја промена.
  • 40 стандардни закупнициБарање без опсег никогаш не стигнува до податоците.

Мерено на живата верзија

„Нашата апликација секогаш филтрира по компания.“

„Секогаш“ во таа реченица прави многу работа.

Спушете ја границата надолу во базата и заборавена WHERE клаузула враќа ништо наместо туѓи клиенти. Празен екран е подобар неуспех од незгодно запознавање.

За групи што водат неколку брендови →