Смешивание данных и верстки это анти-паттерн

В последнее время появились фреймворки навроде AngularJS которые активно продвигают концепцию размещения данных, конфигурации и управляющих конструкций прямо в верстке, испльзуя такую особенность ML языков как полную расширяемость словаря тегов и аттрибутов. Такой подход является анти-паттерном, т.е. примером того как не надо делать, т.к.:

одним из принципов проектирования ПО является т.н. разделение отвественности между компонентами, так что одна логическая единица системы выполняет только одну функцию, а когда верстка содержит в себе множество аттрибутов и значений данных она берет на себя кроме управления отображением еще и задачу хранения состояний

второй практический момент это увеличение нагрузки на клиенсткую часть приложения, поскольку у вас существует множество изменяемых аттрибутов данных, требуется также и отслеживание изменений этих данных, если в обычных системах хранения эти задачи оптимизированы, то исторически слабоватая т.к. работает в один поток и без того нагруженная отображением DOM-подсистема дополнительно загружается весьма требовательной задачей. Т.е. там где у вас были десятки событий и обраточиков их станет тысячи. Чтение и запись данных из атрибутов это тоже линшие обращения в DOM, дереву, эти операции будут вызывать тучи каскадных событий и конечно происходить в циклах без ограничений и рекурсиях. Вобщем, если ваш браузер тормозит, то это все только начало;)

внешний вид веб-приложений и сайтов меняется очень часто, и работу с над ним ведут не программисты, а специалисты по дизайну, юзабилити и верстальщики (задачи которых близки к программированию но всеже фокусировка идет несколько да другую область), атрибуты данных и конфигурация - область ответсвенности разработчиков и когда для выших приложений попросят создать новый вид задача значительно усложнится именно от того, что продукт который к вам поступит не будет содержать всех нужных вам аттрибутов.

обычно для связи кода с отображением используют атрибут идентификатора (id) или классы, в случае с хранением там данных таких аттрибутов будет неограниченное и не предсказуемое количество, что порождает также проблему читабельности и поддерживаемости результата. Скажем у объекта данных 150 полей информации которые надо использовать, в этом случае верстка хранящая эти данные станет просто монструозной. Вот как-то так:

<div id="FooBar" class="one two three_item and so on usually markup is extremely verbose" data-parameter1="foo" data-parameter2="foo" data-parameter3="foo" data-parameter3="foo" data-parameter4="foo"  data-parameter5="foo" data-parameter6="foo" data-parameter7="foo" data-parameter8="foo" data-parameter9="foo" data-parameter10="foo" data-parameter11="foo" data-parameter12="foo" data-parameter13="foo" data-parameter14="foo" data-parameter15="foo" data-parameter16="foo" data-parameter17="foo" data-parameter18="foo" data-parameter19="foo" data-parameter20="foo" data-parameter21="foo" data-parameter22="foo" data-parameter24="foo" data-parameter25="foo" data-parameter26="foo" data-parameter27="foo" data-parameter28="foo" data-parameter29="foo" data-parameter30="foo" data-parameter31="foo" data-parameter32="foo" data-parameter33="foo" data-parameter34="foo" data-parameter35="foo" data-parameter36="foo" data-parameter37="foo" data-parameter38="foo" data-parameter39="foo"></div>

Это меньше трети от 150, а уже страшно, теперь представьте что у вас грид отображающий 200 строк таких данных, часть из которых бинарные, т.е. например картинки.  

А если учесть что данные эти не проверяются в отличии от программых проверяемых компитяторами, интерпретаторами и средами разработки поддержка и развитие таких систем становится чреззвычайно сложным и дорогим занятием.

В программных системах традиционным бутылочным горлышком является подсистема ввода/вывода, окно браузера и деревом элементов сайта или приложения тожа такая подсистема, только гораздо более сложная и медленная чем традиционный файл/сокет/терминал. Использование ее в качестве подсистемы хранения данных или шины обмена между компонентами не кажется мне хорошей или просто оправданной идеей.

и конечно эта идея не нова, а скорее наоборот благополучно забытое старое заблуждение, были раньше технологии навроде ColdFusion, Parser которые позволяли даже запросы к базам данных встраивать в верстку и ни одна из них не зарекоммендовала себя как эффективная. Пришел MVC и расставил все на вебе по полочкам.

Среднее (0 Голоса)
Средний рейтинг 0.0 звезд из 5.


Пока нет комментариев. Будь первым.