iKonekt

Odvajanje

Granica koju čuva baza podataka, a ne kod

Svaki CRM tvrdi da je višekorisnički. Ta tvrdnja je jeftina; bitno je koji sloj drži liniju. Ako je odgovor „naša aplikacija uvijek dodaje pravi filter“, onda je garancija samo toliko dobra koliko i najmanje odmoran programer koji je ikada napisao upit.

iKonekt je bio višekorisnički od svoje prve migracije, a ne naknadno dopunjen, što zvuči kao hvala, a zapravo je priznanje: naknadno ga uvesti na uvjerljiv način gotovo je nemoguće, i svako ko je pokušao ima svoju priču.

Odvojenost živi u bazi podataka. Svaka od dvadeset šest tabela nosi korisnika kojem pripada, a politika koja 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 nivou redova, nametnuta

Nije konvencija, nije pravilo u pregledu koda. Baza odbija. Sedamdeset dvije politike, napisane jedna po jedna, a ne generisane — jer je politika koju je generisao mašina politika koju nitko nije pročitao.

Kompozitni ključevi

Podređeni zapis referencira svog korisnika i svog roditelja zajedno, kao par. Lutajući identifikator iz pogrešne kompanije se ne razriješi — jednostavno nije važeća referenca.

Nikada bez podrazumijevanog korisnika

Zahtjev bez opsega ne postaje tiho zahtjev za korisnikom nula. Baca grešku prije nego što stigne do baze. Ne postoji „neograničeni“ režim koji se može zaboraviti isključiti.

Greška koja se nije mogla oglašavati

Dok je rađen posao oko višekorisničkog rada, većina grešaka je bila bučna. Dajte dvjema kompanijama isti domen kupca i baza odmah prigovara, sa kodom greške i tragom steka; popravite to prije ručka.

Jedna nije prigovorila. Tabela uređivih presretanja upita bila je ključana samo po vrsti upita — ne po vrsti i korisniku. Druga kompanija koja uređuje svoju kopiju bi tiho pregazila kopiju prve, kroz potpuno ispravan SQL, bez greške, bez upozorenja i bez pao testa. Otkrivena je čitanjem svakog preostalog jedinstvenog indeksa nakon promjene ključa, jedan po jedan, iz sumnje da i bučne imaju društvo.

Spominjemo to jer je to iskren oblik ovog posla. Odvojenost nije funkcija koju uključite; to je navika čitanja dosadnih dijelova šeme uz pretpostavku da se nešto tamo ne slaže s Vama.

Testovi, radi reda: 942 njih, pokrenuti na bazi podataka izgrađenoj ispočetka pri svakoj promjeni. Nisu tu da dokažu da je dizajn pametan. Tu su jer je režim otkazivanja ovog dizajna tih, a tihe otkaze treba neko da vikne u njihovo ime.

Šta odvojenost donosi običnom čovjeku

  • Grupa može voditi više kompanija iz jedne instalacije, i prodavac u jednoj nikada neće vidjeti kupca druge — ne po pravilu, nego po konstrukciji.
  • Partnerski program, skup upita, potraživanje na kupca: sve u opsegu po kompaniji, tako da konfiguracija jednog korisnika ne može postati svima.
  • Zahtjev za brisanjem se ispunjava unutar granice, a ne preko zajedničke gomile, i upravo to čini mogućim iskren odgovor.
  • I niko ne mora ništa pamtiti. U tome je poenta — garancija koja zavisi od pamćenja nije garancija.

Još jedan red koji nije o bazama podataka

Svaka sestrinska usluga u porodici drži svoj vlastiti imenovani pristupni podatak. Ništa ne govori dijeljenim, tako da nijedna usluga ne može slučajno djelovati kao druga — mala disciplina koja je došla direktno od toga da smo nekad imali dijeljeni token i da nam to nije bilo drago.

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

GranicaIspod aplikacije
  • 126 tabelaSvaka nosi svog korisnika, uz nametnutu provjeru.
  • 272 politikeNapisane pojedinačno, tako da je svaku pročitao čovjek.
  • 3942 testaNa bazi podataka izgrađenoj ispočetka, pri svakoj promjeni.
  • 40 podrazumijevanih korisnikaZahtjev bez opsega nikada ne dolazi do podataka.

Izmjereno na živoj verziji

„Naša aplikacija uvijek filtrira po kompaniji.”

Riječ „uvijek” u toj rečenici radi mnogo posla.

Pomjerite granicu naniže u bazu podataka i zaboravljena WHERE klauzala neće vratiti ništa umjesto tuđih kupaca. Prazan ekran je bolji kvar nego nezgodan susret.

Za grupe koje vode više brendova →