Web应用程序是否可以松耦合?

时间:2012-02-06 01:04:41

标签: javascript html css xml oop

我理解内容,表示和行为应该通过使用HTML,CSS和JS分开来独立实现它们。是否有最佳实践可以在动态Web应用程序中保持松散耦合的同时具体绑定这些元素?它甚至可能吗?最好不依赖于jQuery?

澄清我在谈论的内容:HTML没有定义新标签的机制,因此当您的JavaScript模型需要生成内容时,其表示的标签和结构必须在JS中定义或以某种方式制作可以访问它,将行为与内容紧密结合。

在有人调用over-OOP之前,我想保留JS中的标签和CSS类的原因是我甚至不想将HTML作为前端提交。我最终想要的底层模型至少有五种不同的表示形式,并且将模型与HTML规则紧密耦合至少两种。

有没有办法将模型后期绑定到目标表示而不牺牲动态或松耦合?就像XML文档对应模板元素一样来模板HTML片段?

更新

虽然提供关于因子分解和OO最佳实践的问题的具体细节似乎是落后的,但我想提供一个更新的形式和形式纠缠的例子。 HTML固有的功能。内容和纠缠的纠缠HTML和JS之间的行为是问题,但不是示例,我想要一个在我更改细节时不会中断的答案。它来自一个非常不同的项目,而不是我第一次提出这个问题时的工作,但要点是相同的:

  • 我有一些用于UI小部件的HTML。它是一个视图,向用户表示模型对象 - 选择的调色板。调色板本身是应用程序任务的一部分,因此他们不会查看,他们会进行模型化。

  • 我想在至少2个不同的对话框中使用这个小部件(以及将来我想要的任何对话框)。在一个方面,我需要一个更改的选择来立即采取行动,在同一个对话框的画布元素中重新着色一组图像。在另一个方面,我只需要选择两个不同的集合 - 每个集合中有一个选择。

  • 我不想复制和粘贴此窗口小部件的HTML表单或JS行为,因为我希望维护和修订从一个基本事物传播到其所有实例。因此,我的源代码中可能只存在一个小部件实例,无论其形式如何。

  • 我不想直接使用我的JS呈现HTML标记,因为这样做会放弃我对IDE的错误检查和内容帮助。此外,如果HTML输出存在问题,我们JS中的源代码将不太清楚,因为生成HTML的过程看起来不像HTML或必然反映其结构。最后,我想独立于我的JS测试小部件CSS和HTML的更改效果。

  • 我不想涉及其他依赖项,例如单独的模板和我的源中的参数化语言,因为各种标准的变化或不断变化的需求可能会破坏它们的兼容性,或者它们本身可能会在未来变得无法维护,从而给我留下了大量无用的资源。取决于jQuery是可以的,因为它为浏览器之间的规范化做了更多的事情(更不用说为了方便了),因为它无处不在,它可能会破坏,但其他库将被视为极度怀疑。

  • 我想在JS中指定更改和检索窗口小部件状态(用户选择的调色板的颜色,用户之间的选择)以及仅引用窗口小部件及其组件部分的详细信息,因为它将成为以不同方式使用其信息的多个对话框的一部分。

  • 同时,其他JS代码(对话框的行为)需要能够观察和初始化窗口小部件的状态 - 但不包括对窗口小部件内部的任何特定引用结构,可能有一天会改变以适应新功能,修复错误等。

为了简单地制作小部件HTML的多个副本,我可以决定在HTML文件中存在的模板节点上调用jquery.clone,并从函数中插入我需要它们的内容设置对话框。当任何克隆元素具有idname属性时,HTML会使事情变得困难,但在克隆过程中小心处理可以创建唯一标识符,指向相应的label元素和href属性在新标识符处,并在数据属性中保留旧标识符。所以一切都很好,结构和结构都很好内容,显然CSS演示文稿传播到克隆就好了。

当我尝试使用对话框的控制器实现小部件的界面时,就会出现问题。暴露窗口小部件状态抽象的最具前瞻性的方法是什么?即我不想使用widgetJquery.find('input:checked').val()从代码中获取所选颜色,这些代码绝对不必提交基于已检查的输入元素的选择,该输入元素的value属性是一组序列化颜色

我希望能让我更清楚地了解我所寻找的内容,而不会将问题弄清楚。

2 个答案:

答案 0 :(得分:1)

您始终可以使用不同的XSLT解析XML 但是,似乎你试图抽象太多 使用MVC,使用不同的视图进行解析。

你所写的方法在旧系统中很常见,我在10多年前工作过,可能有很好的理由让它扼杀它。

答案 1 :(得分:1)

使用设计模式最好在建筑上实现松耦合。 Mediator Pattern 中提供了如何实现松散耦合的一个很好的示例。但是,有几种模式可供使用。

我建议您阅读Addy Osmani的 'Essential JavaScript design Patterns' ,以全面了解各种模式。

享受!

相关问题