UI数据绑定:替代方案与未来

12

UI 数据绑定,即将应用程序的业务层/数据模型中的信息/数据传输到 UI,并从 UI 传回数据模型,似乎被语言和框架设计师忽略了一点。

当今软件系统处理的几乎所有信息都必须在处理链的某个点呈现给人类用户,但我们从编程系统中获得的支持,以向用户呈现信息为主要内容,大多由难以维护的传输方法组成,一些系统使用反射,没有编译时验证(“propertychanged”任何人?)或专有的代码生成器。

我的意思是,Erik Meijer、Anders Hejlsberg 及其团队已经做出巨大努力,解决了数据库、XML 和代码之间的阻抗不匹配问题…… 但大多数情况下忽略了 UI。(好吧,.net 有数据绑定,但试着使用它,然后让我们谈论一个真正的解决方案) 关键是:为什么不将数据绑定特别作为语言的一等特性来对待呢?为什么我们今天的工具中只有如此有限(或没有)MVC/MVP 模式的支持呢?

请提供评论、提示和指向可用的替代概念,甚至是正在进行中的工作。在这个领域里,是否有任何新的创意和新鲜的想法?有哪些有用的框架、语言概念支持数据绑定,以及可能帮助您处理应用程序或系统中的数据绑定的工具?

7个回答

6

虽然WPF绑定很好,但它太复杂了,它将XPath的特性与普通的.Net绑定结合起来,非常灵活,但是当它变得复杂时很难调试,而且非常冗长 - 一段代码需要多少个IValueConverter?

不过,WPF中的DependencyObject非常出色 - 它管理内存,具有内置的更改通知功能 - 这是绑定和属性的良好开端。


2

Cocoa和Objective-C中的数据绑定非常活跃和健康。其中一部分原因是它建立在Cocoa中非常稳定和深思熟虑的键值编码和键值观察功能之上。它也很好地集成在苹果正在开发的许多新技术中,例如核心数据。


2
我正在进行一个移植项目的后期阶段,将由AppMaker生成的基于C的Macintosh GUI代码转移到WPF。
AppMaker的代码生成风格在15年前就领先于时代 - 它生成基于模型的代码,并采用数据绑定和基于属性的方法。C代码的缺点是所有的管道都被暴露出来。
这个项目非常有趣 - 将一个具有纯绑定和命令结构的架构(尽管代码丑陋)移植到WPF。我实际上编写了一个new AppMaker code generator,将原始对象模型导出为XML,并使用Ruby从中生成XAML、C#和C++/CLI。
我对WPF中的数据绑定模型印象非常深刻,尽管找到XAML和C#中应该放什么的最佳位置很有趣。正如在最近的DevJam演示中所解释的那样,我们决定采用三层方法:
  1. 非常简洁的XAML用于样式,
  2. C#用于绑定,
  3. C++/CLI用于ViewModel实现。
我是一个长期使用绑定方法的粉丝-我的C++ OOFILE框架最早在1997年采用了绑定方法,以简化不同GUI框架下的数据库连接到表单
有趣的一点是,经过多年合作,我从原始的美国公司主人手中获得了AppMaker。几乎难以置信的是,在澳大利亚西部珀斯市有一家小公司需要移植复杂的AppMaker生成的GUI,并找到了世界上仅存的AppMaker专家,距离约30英里。

1

1

其他支持数据绑定的框架包括Adobe Flex和Microsoft的WPF。


1
WPF中的数据绑定和UI模型非常出色。您可以绑定到对象的方法,异步绑定,单向绑定(从源到目标或反之亦然)或双向绑定,并绑定到屏幕上的其他UI元素。
您可以指定DataTemplates,控制特定类型的显示方式。您可以定义触发器,允许UI根据绑定对象(或UI中的其他位置)的更改而更改。简而言之,如果您感觉UI /绑定表示状态不足,那么您应该真正看看WPF。
这里是最近的post,它说明了WPF的强大之处,使用基本构造,您可以显示带有坐标的地图。

是的,WPF已经基于反射和使用字符串常量连接事物的方式推进了.NET数据绑定。然而,一旦应用程序变得比一个很酷的示例更大,这往往会带来问题。在那种情况下,您需要更多的编译时验证来确保您的应用程序。 - pointernil

1
在Python中,您可以使用Enthought Traits来实现。您定义一个模型,该模型已经包含所有知识和逻辑,因此您可以使用一行代码为其创建编辑器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接