iKonekt
Отворите конзолу

Odvajanje

Granica koju čuva baza, a ne kod

Svaki CRM tvrdi da podržava više zakupaca. To tvrđenje je jeftino; važno je koji sloj drži granicu. Ako je odgovor „naša aplikacija uvek dodaje pravi filter”, onda je garancija vredna onoliko koliko vredi najmanje odmoran programer koji je ikada napisao upit.

iKonekt je od prve migracije bio višezakupački, a nije to naknadno dograđivan — što zvuči kao hvalisanje, a zapravo je priznanje: naknadno ga ugraditi na ubeđiv način gotovo je nemoguće, i svako ko je pokušao ima svoju priču.

Razdvajanje živi u bazi podataka. Svaka od dvadeset šest tabela nosi zakupca kojem pripada, i pravilo koje to proverava izvršava se pri svakom čitanju i svakom upisu, potpuno ispod aplikacije. Upit koji zaboravi granicu ne vraća tuđe kupce. On ne vraća ništa.

Sigurnost na nivou redova, nametnuta

Nije konvencija, nije pravilo kod revizije koda. Baza odbija. Sedamdeset i dva pravila, napisana jedno po jedno, a ne generisana — jer je pravilo koje je generisano pravilo koje niko nije pročitao.

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

Podređena evidencija referencira svog zakupca i svog roditelja zajedno, kao par. Lutajući identifikator iz pogrešne firme ne razrešava se — on jednostavno nije ispravna referenca.

Bez podrazumevanog zakupca, nikada

Zahtev bez obsega tiho se ne pretvara u zahtev za zakupcem broj nula. Puca pre nego što stigne do baze. Ne postoji „neobuhvatni” režim koji bi se moglo zaboraviti isključiti.

Greška koja nije mogla da se najavi

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

Једна није ускратила. Табела уредивих преписивања упита била је кључена само по врсти упита — не по врсти и закупцу. Друга компанија би својим уређивањем тихо прегазила копију прве, потпуно валидним SQL-ом, без грешке, без упозорења и без пада теста. Откривено је читањем сваког преосталог јединственог индекса, један по један, из сумње да гласне нису саме.

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

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

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

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

Још један ред који није о базама

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

То је исти нагон као правило базе. Учини погрешно немогућим уместо обесхрабреним, и трошите пажњу на купце уместо на опрезност.

ГраницаИспод апликације
  • 126 табелаСвака носи свог закупца, уз присилну проверу.
  • 272 правилаНаписана појединачно, тако да је свако прочитао човек.
  • 3942 тестаНа бази обновљеној од нуле, при свакој промени.
  • 40 подразумеваних закупацаЗахтев без обухвата никада не стиже до података.

Мерено на живом издању

„Наша апликација увек филтрира по компанији."

„Увек“ у тој реченици ради много посла.

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

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