我一直在尝试决定采用哪种方法来构建UI:编程的还是声明的。我正在使用JavaScript和web技术。在一些像ExtJS和YUI这样的项目中,他们采用了一种编程方法:
var container = new Ext.Container({
style: 'padding: 4px;',
items: [
new Button({text: 'hello'})
]
});
container.render(document.body);
当您需要动态创建视图组件时,编程方法可能是必要的(?)。它也可以更容易编程,至少对我来说是这样,因为我习惯了API和代码助手。
然而,像XUL(用于Firefox和Thunderbird UI)这样的一些技术是基于声明性方法的:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="vbox example" title="Example 3...."
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox>
<button id="yes" label="Yes"/>
<button id="no" label="No"/>
<button id="maybe" label="Maybe"/>
</vbox>
</window>
还有一个名为AmpleSDK的JavaScriptGUI框架采用声明性方法。因此,对于我的基于JavaScript的应用程序,我有两个选择。
Flex还支持声明性UI和程序性UI。WFP和Silverlight似乎专注于XAML。此外,Open Laszlo似乎使用了声明性方法。
然后我看到jQueryUI是程序化的,DojoToolkit介于这两种方法之间。
我脑子里有几个问题:
1) 动态(运行时添加的组件)UI是否可以仅以声明方式实现?
2) 支持这两种方法,这样就可以在大部分部分使用声明式风格,如果需要,还可以使用程序式风格,这有意义吗?
3) 你更喜欢哪一个,为什么?
1)是的,您总是可以执行以下操作:elem.innerHTML="<content>";大多数语言都支持类似的功能。
2) 据我所见,大多数语言都支持这两种语言。我的猜测是,最终,一个变种只是变成了另一个变种。如果不支持其中一种,语言就会限制自己。(我不想使用xyz,我不能以声明/编程的方式编写UI)。
3) 我个人喜欢陈述性,它倾向于用更少的行完成事情。
这取决于您想要制作的应用程序类型:
→静态
声明式语法更好,更易于管理
→动态
声明性和程序性的混合将是最好的