我不确定历史,但我的猜测是这个意义上的“绑定”一词源于“数据绑定”一词。“数据绑定”确实是一个动作:它使用来自实际数据(AKA 模型)的值填充 UI 控件,例如,当表单中的字段被数据库中的数据填充并自动更新时,使用您提到的观察者模式. 我认为绑定的主要区别是单向与双向:在双向数据绑定中,用户输入也会同步回模型,而不是仅将数据从模型同步到视图。
“绑定”是动词,“数据绑定”的动词形式是“绑定数据”或“执行数据绑定”。第二个例子表明“数据绑定”也是一个名词,可以定义为“将数据/模型属性绑定到 UI/视图属性的行为”。关于“绑定”本身的名词版本,我认为您是正确的,它通常指的是两个属性之间的单独绑定。为了直观地展示这一点,假设这些点代表两个相互绑定的属性:
• ----- •</p>
这里的“绑定”是它们之间的界线。
更具体地说,单向绑定可以用一个箭头表示:
• ----> •</p>
以及带有两个箭头的双向绑定:
• <---> •</p>
“实时绑定”是一个术语,仅用于表示正在使用观察者模式。我的猜测是,区分“实时绑定”的愿望可能来自于 Web 开发人员,他们之前曾使用过在第一次加载页面时,每个 HTTP 请求只发生一次数据绑定的框架。现在,大量 Javascript 的 Web 应用程序正在成为常态(部分归功于 ajax),没有理由不使用 MVC 原始定义所建议的观察者模式,因此“实时绑定”对于 RIA 而言可能是一个不必要的术语或本机桌面或移动应用程序。
顺便说一句,Trygve Reenskaug 对 MVC 的最初设想(他发明了它)从根本上是关于在系统中反映最终用户的心理模型,因此“模型”是用户几乎可以直接操纵的东西(或者至少感觉这样用户)。所以观察者模式(或者至少是保持模型和视图同步而不重新加载页面的某种机制)对于它来说是必不可少的,并且在服务器端拥有大部分代码的 Web 开发框架并不是最初设想的真正 MVC,而是而是在代码组织方面遵循相同一般思想的变体。主要用于客户端应用程序的现代 Javascript 框架使真正的 MVC 可以用于 Web 开发。
回到您在问题中提出的观点,当您说绑定不一定仅在模型属性和视图属性之间时,我认为您也是正确的;它可以在两个模型属性之间(通常在不同的模型上),或者在两个视图属性之间。但我不同意你的说法,即“绑定”只是编程方面的一个名词——显然在英语中它是动词“绑定”的名词形式,换句话说,“绑定的行为”,我认为这是一个有效的在编程中的使用也是如此。所以本质上我要说的是它有双重含义,但我认为你提出的定义是最常见的。这是我对正式定义的尝试:
捆绑。
- 两个属性之间的连接(通常在两个不同的对象中),它使属性彼此保持同步,即具有相同的值。同步可以是单向的,也可以是双向的。
- 发起这种连接的行为。