Возможна ли слабая связь для веб-приложения? - PullRequest
3 голосов
/ 06 февраля 2012

Я понимаю, что контент, презентация и поведение должны быть разделены с помощью HTML, CSS и JS для их независимой реализации.Есть ли лучшая практика для конкретного связывания этих элементов при сохранении слабой связи в динамическом веб-приложении?Это вообще возможно?Оптимально, без зависимости от jQuery?

Чтобы пояснить, о чем я говорю: в HTML нет механизма определения новых тегов, поэтому, когда вашей модели JavaScript требуется генерировать контент, теги и структура для ее представленияобязательно определяется в JS или каким-то образом становится доступным для него, тесно связывая поведение с контентом.

Прежде чем кто-то вызывает over-OOP, я хочу не использовать теги и CSS-классы в JS, потому что я даже нехочу зафиксировать HTML в качестве внешнего интерфейса.Есть как минимум пять разных представлений моей базовой модели, которые я в конечном итоге захочу, и тесная связь модели с HTML исключает как минимум два из них.

Есть ли какой-нибудь способ позднего связывания модели сцелевое представление без ущерба для динамики или слабой связи?Как XML-документ, соответствующий элементам модели фрагментам HTML-кода шаблона?

ОБНОВЛЕНИЕ

Хотя представляется не совсем понятным предоставление конкретных подробностей вопроса о факторинге и наилучшей практике ОО, я хочу предоставить более свежую информацию.пример запутанности формы и функции, свойственной HTML.Проблема запутывания контента и поведения между HTML и JS - это проблема, а не пример, и я хочу получить ответ, который не ломается, когда я меняю детали.Это совсем другой проект, чем тот, над которым я работал, когда я впервые задал этот вопрос, но суть та же:

  • У меня есть некоторый HTML для виджета пользовательского интерфейса.Это представление, представляющее объект модели - выбор палитр - пользователю.Сами палитры являются частью задачи приложения, поэтому они не являются представлениями, они являются моделями.

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

  • Я не хочу копировать и вставлять форму HTML этого виджета или поведение JS, потому что яхочу, чтобы обслуживание и ревизия распространялись от одной базовой вещи до всех ее экземпляров.Таким образом, в моем источнике может существовать только один экземпляр виджета, какой бы он ни был.

  • Я не хочу, чтобы мой JS отображал HTML-теги напрямую, потому что это приведет к потерепроверка ошибок в моей среде IDE и помощь с контентом в HTML.Кроме того, если есть проблемы с выводом HTML, их источник в моем JS будет менее понятным, потому что процесс генерации HTML не похож на HTML или обязательно отражает его структуру.Наконец, я хочу проверить влияние изменений CSS и HTML виджета независимо от моего JS.

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

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

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

Чтобы просто сделать несколько копий HTML-кода виджета, я могу остановиться на вызове jquery.clone на узле шаблона, который существует в файле HTML, и вставке содержимогогде они мне нужны, из функции, которая устанавливает диалог.HTML усложняет ситуацию, когда любой из клонированных элементов имеет атрибуты id или name, но тщательная обработка во время клонирования может создавать уникальные идентификаторы, указывать их соответствующие атрибуты label и href на новые идентификаторы и сохранятьстарые доступны в атрибутах данных.Таким образом, все хорошо для структуры и контента, и, очевидно, представление CSS распространяется на клон просто отлично.

Проблема возникает, когда я пытаюсь реализовать интерфейс виджета с помощью контроллера его диалога.Какой самый перспективный способ раскрыть абстракцию состояния виджета?Т.е. я не хочу использовать widgetJquery.find('input:checked').val(), чтобы получить выбранный цвет из кода, который не обязательно должен фиксировать выделение на основе проверенного элемента ввода, атрибут значения которого представляет собой набор сериализованных цветов.

Надеюсь, это прояснит, что я ищу, не путая вопрос с деталями.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Слабая связь лучше всего достигается архитектурно с использованием шаблонов проектирования. Отличный пример того, как добиться слабой связи, можно найти в Mediator Pattern . Однако есть несколько шаблонов для использования.

Я предлагаю прочитать «Основные шаблоны дизайна JavaScript» от Addy Osmani для всестороннего охвата ряда шаблонов.

Наслаждайтесь!

1 голос
/ 06 февраля 2012

У вас всегда могут быть разные XSLT, анализирующие XML.
Но, кажется, вы пытаетесь слишком много абстрагироваться.
используйте MVC, используйте различные виды для разбора.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...