«Каноническая» идея широко распространена в программном обеспечении; паттерны, такие как Canonical Model , Canonical Schema , Canonical Data Model и т. д., как представляется, снова и снова появляются в процессе разработки.
Как и многие разработчики, я часто некритически следовал общепринятому мнению, что вам нужна каноническая модель, иначе вы столкнетесь с комбинаторным взрывом картостроителей и переводчиков. Или , по крайней мере, я использовал, чтобы сделать это , пока пару лет назад , когда я впервые прочитал несколько-позорный EF вотум недоверия :
Гипотезы, которые когда-то поддерживали стремление к каноническим моделям данных, не включали и не могли включать факторы, которые будут обнаружены, как только идея будет реализована на практике. В течение многих лет проб и ошибок мы обнаружили, что использование отдельных моделей для каждого отдельного контекста, в котором может использоваться каноническая модель данных, является наименее сложным подходом, наименее затратным подходом, и тот, который приводит к большей ремонтопригодности и расширяемости приложений и конечных точек, использующих контекстные модели, и этот подход не поощряет энтропию программного обеспечения, как это делают канонические модели.
Эссе не содержит каких-либо доказательств в поддержку своих утверждений, но заставило меня усомниться в подходе CDM достаточно долго, чтобы попробовать альтернативу, и получающееся в результате программное обеспечение не взорвалось ни в прямом, ни в переносном смысле. Но это не значит много в изоляции; Мне бы просто повезло.
Поэтому мне интересно, проводились ли какие-либо серьезные исследования практических, долгосрочных последствий наличия канонической модели в сравнении с контекстными моделями в программной системе или архитектуре?
Или, если еще слишком рано об этом спрашивать, то написали ли разработчики / архитекторы о личном опыте перехода с CDM на независимые контекстные модели или наоборот, и как это повлияло на такие вещи, как производительность, сложность или надежность?
Как насчет различий на разных уровнях, т. Е. Использование одной и той же модели в одном приложении или ее использование в системе приложений или на всем предприятии?
(Только факты, пожалуйста; истории войны приветствуются, но не спекуляции.)