iKonekt
Адкрыць кансоль

Раздзяленне

Мяжа, якую трымае база дадзеных, а не код

Кожная CRM заяўляе, што яна шматарэндарная. Заява танная; важна тое, які ўзровень трымае мяжу. Калі адказ — «наша праграма заўсёды дадае правільны фільтр», то гарантыя толькі такая ж добрая, як самы недаспаны распрацоўшчык, які калі-небудзь пісаў запыт.

iKonekt быў шматарэндарным з першай міграцыі, а не дапрацаваны пасля, — гэта гучыць як хвастоўства, а насамрэч з'яўляецца прызнаннем: дапрацаваць гэта пасля амаль немагчыма пераканаўча, і ва ўсіх, хто спрабаваў, ёсць свая гісторыя.

Адасабленне жыве ў базе дадзеных. Кожная з дваццаці шасці табліц нясе свайго арандатара, і правіла, якое гэта правярае, выконваецца пры кожным чытанні і кожным запісе, цалкам ніжэй узроўня праграмы. Запыт, які забыўся пра мяжу, не вяртае чужых кліентаў. Ён не вяртае нічога.

Бяспека на ўзроўні радкоў, прымусовая

Не дамоўленасць, не правіла код-рэв'ю. База дадзеных адмаўляе. Семдзесят дзве правілы, напісаныя па адной, а не згенераваныя — бо згенераванае правіла — гэта правіла, якое ніхто не чытаў.

Складаныя ключы

Даччыны запіс спасылаецца на свайго арандатара і на свайго бацьку разам, як пара. Странны ідэнтыфікатар з чужой кампаніі не вырашыцца — ён проста не з'яўляецца карэктнай спасылкай.

Ніякага арандатара па змаўчанні, ніколі

Запыт без вобласці не ціха не становіцца запытам да арандатара нуль. Ён выкідвае памылку да таго, як дойдзе да базы дадзеных. Няма рэжыму «unscoped», які можна забыцца выключыць.

Памылка, якая не магла аб'явіць пра сябе

Пакуль выконвалася праца па арандатах, большасць памылак былі гучнымі. Дайце дзвюм кампаніям адну клiенцкую дамену і аб'екты базы дадзеных адразу — з кодам памылкі і стэкам выклікаў; вы выпраўляеце гэта да абеду.

Адзін не ўзняў пярэчанняў. Табліца рэдагаваных перавызначэнняў прамптаў была ключаваная толькі па тыпе прампта — не па тыпе і арандата. Другая кампанія, рэдагуючы сваю копію, цішком перазапісала б першую — цалкам карэктным SQL, без памылкі, без папярэджання і без правальнага тэсту. Гэта знайшлі, перачытваючы пасля змены ключа кожны астатні ўнікальны індэкс па адным, на падазрэнні, што ў гучных былі кампаньёны.

Мы пра гэта згадваем, бо гэта сумленны аблічча такой працы. Ізаляцыя — не функцыя, якую ўключаюць; гэта звычка чытаць сумныя часткі схемы з меркаваннем, што нешта там з вамі не згодна.

Тэсты, для пратаколу: іх 942, яны запускаюцца на базе, адбудаванай з нуля пры кожнай змене. Яны не там, каб даказаць вынаходлівасць дызайну. Яны там таму, што рэжым адмовы гэтага канкрэтнага дызайну — маўклівы, а маўклівым адмовам патрэбен хтосьці, хто крычыць за іх.

Што ізаляцыя дае звычайнаму чалавеку

  • Група можа весці некалькі кампаній з адной усталяванай сістэмы, і прадавец з адной ніколі не ўбачыць клiента іншай — не па правілах, а па канструкцыі.
  • Партнёрская праграма, набор прамптаў, прэтэнзія на клiента — усё мае абсяг па кампаніі, таму канфігурацыя аднаго арандата не можа стаць здабыткам усіх.
  • Запыт на выдаленне дадзеных выконваецца ў межах мяжы, а не па агульнай кучы, — і менавіта гэта дазваляе адказваць сумленна.
  • І ніхто не павінен гэтага памятаць. У гэтым і сэнс — гарантыя, якая залежыць ад памяці, не з'яўляецца гарантіяй.

Яшчэ адзін радок не пра базы дадзеных

Кожны сэрвіс-сусед у сям'і трымае ўласны іменны аўтэнтыфікатар. Нішто не размаўляе праз агульны, таму ніводны сэрвіс не можа выпадкова дзейнічаць як іншы — маленькая дысцыпліна, што прыйшла непасрэдна з досведу агульнага токена, які нам не спадабаўся.

Гэта той самы інстынкт, што і правіла базы дадзеных. Зрабіце няправільнае немагчымым, а не толькі неўзгодненым, — і вы траціце ўвагу на клiентаў, а не на пільнасць.

МяжаНіжэй узроўня праграмы
  • 126 табліцКожная нясе свайго арандата, з прымусовай праверкай.
  • 272 правілыВыпісаныя паасобку, таму кожнае прачытаў чалавек.
  • 3942 тэстыНа базе, адбудаванай з нуля, пры кожнай змене.
  • 40 арандатаў па змаўчанніЗапыт без абсягу ніколі не дасягае дадзеных.

Вымерана на жывой зборцы

«Наша праграма заўсёды фільтруе па кампаніі».

«Заўсёды» ў гэтым сказе робіць вялікую працу.

Перанясіце мяжу ўніз, у базу дадзеных, і забытая умова WHERE верне пустату, а не чужых клiентаў. Пусты экран — лепшая адмова, чым нязручнае знаёмства.

Для груп з некалькімі брэндамі →