iKonekt

Odvajanje

Granica koju čuva baza podataka, a ne kôd

Svaki CRM tvrdi da je višekorisnički. Takva je tvrdnja jeftina; bitno je koji sloj drži granicu. Ako je odgovor „naša aplikacija uvijek dodaje pravi filter”, onda je garancija vrijedna onoliko koliko vrijedi najmanje odmoran programer koji je ikada napisao upit.

iKonekt je bio višekorisnički od prve migracije, a ne naknadno dograđen, što zvuči kao hvalisanje, a zapravo je priznanje: naknadno ga ugraditi uvjerljivo je gotovo nemoguće, a svi koji su pokušali imaju svoju priču.

Odvojenost živi u bazi podataka. Svaka od dvadeset i šest tablica nosi korisnika kojem pripada, a pravilo koje to provjerava izvršava se pri svakom čitanju i svakom pisanju, potpuno ispod aplikacije. Upit koji zaboravi granicu ne vraća tuđe kupce. Ne vraća ništa.

Sigurnost na razini redaka, nametnuta

Nije konvencija, nije pravilo pregleda koda. Baza podataka odbija. Sedamdeset i dva pravila, napisana jedno po jedno, a ne generirana — jer je generirano pravilo pravilo koje nitko nije pročitao.

Složeni ključevi

Podređeni zapis referencira svog korisnika i svog nadređenog zajedno, kao par. Lutalički identifikator iz pogrešne tvrtke se ne razriješi — jednostavno nije valjana referenca.

Nikada bez zadanog klijenta

Zahtjev bez opsega tiho ne postaje zahtjev za korisnikom nula. Baca pogrešku prije nego što dođe do baze podataka. Ne postoji „neograničeni” način rada koji se može zaboraviti isključiti.

Greška koja se nije mogla javiti

Dok se radilo na višekorisničnosti, većina grešaka bila je bučna. Dajte dvjema tvrtkama istu domenu kupca i baza odmah prigovori, s kodom pogreške i stogom; popravite je prije ručka.

Jedna nije prigovorila. Tablica uređivih presretanja upita bila je ključana samo po vrsti upita — ne po vrsti i korisniku. Druga bi tvrtka uređujući svoju kopiju tiho prepravila kopiju prve, potpuno valjanim SQL-om, bez pogreške, bez upozorenja i bez paošeg testa. Otkrivena je čitanjem svakog preostalog jedinstvenog indeksa nakon promjene ključa, jedan po jedan, iz sumnje da i bučni imaju društvo.

Spominjemo to jer je to pošten oblik ovog posla. Odvojenost nije značajka koju uključite; to je navika čitanja dosadnih dijelova sheme uz pretpostavku da se nešto u njoj s vama ne slaže.

Testovi, radi reda: njih 942, pokrenutih na bazi podataka obnovljenoj od nule pri svakoj promjeni. Nisu tu da dokažu da je dizajn pametan. Tu su jer način otkazivanja baš ovog dizajna je tih, a tihi kvarovi trebaju nekoga tko će vikati u njihovo ime.

Što odvojenost donosi običnom čovjeku

  • Grupa može voditi nekoliko tvrtki iz jedne instalacije, a prodavač u jednoj nikada neće vidjeti kupca druge — ne pravilom, nego konstrukcijom.
  • Partnerski program, skup upita, potraživanje na kupca: sve je opsežno po tvrtki, pa se konfiguracija jednog korisnika ne može pretvoriti u konfiguraciju svih.
  • Zahtjev za brisanjem ispunjava se unutar granice, a ne kroz zajedničku hrpu, i to je ono što omogućuje iskren odgovor.
  • A nitko ne mora ništa pamtiti. U tome je poanta — garancija koja ovisi o pamćenju nije garancija.

Još jedan redak koji nije o bazama podataka

Svaka sestrinska usluga u obitelji drži vlastitu imenovanu vjerodajnicu. Ništa ne govori dijeljenom vjerodajnicom, pa nijedna usluga ne može slučajno djelovati kao druga — mala disciplina koja je došla izravno iz iskustva nekadašnjeg dijeljenog tokena koje nije bilo ugodno.

To je isti instinkt kao pravilo baze podataka. Učinite pogrešno nemogućim umjesto obeshrabrenim, i pažnju ćete trošiti na kupce umjesto na budnost.

GranicaIspod aplikacije
  • 126 tablicaSvaka nosi svog korisnika, s provjerom koja je nametnuta.
  • 272 pravilaNapisana pojedinačno, tako da je svako pročitala ljudska osoba.
  • 3942 testaNa bazi podataka obnovljenoj od nule, pri svakoj promjeni.
  • 40 zadanih korisnikaZahtjev bez opsega nikada ne doseže podatke.

Izmjereno na živoj verziji

„Naša aplikacija uvijek filtrira po tvrtki.”

U toj rečenici riječ „uvijek” radi teški posao.

Pomaknite granicu prema dolje, u bazu podataka, i zaboravljeni WHERE uvjet vraća ništa umjesto tuđih kupaca. Prazan ekran bolji je neuspjeh od neugodnog upoznavanja.

Za grupe s više brendova →