【问题标题】:MVVM - Presentation Model in Flex vs Presentation Model in Silverlight: advantages and disadvantages?MVVM - Flex 中的表示模型与 Silverlight 中的表示模型:优缺点?
【发布时间】:2011-08-02 09:02:24
【问题描述】:

正如这里所说:

http://houseofbilz.com/archives/2010/12/29/cross-training-in-silverlight-flexmvvm-vs-presentation-model/

“如果您今天在 Google 上搜索“MVVM 和 Flex”,那么第一篇帖子是有人声称 MVVM 不适合 Flex。我完全不同意。开箱即用的 Flex框架使得在 Silverlight 中实现 Presentation Model 比类似的 MVVM 实现要容易得多。这并不是说在 Silverlight 中没有好的第三方库可以让它更容易,而是在没有任何帮助的情况下,它更容易在 Silverlight 中实现弹性。”

因此,作为逻辑概念的 MVVM 可以在两者中实现,但在 Silverlight 中实现它的方式需要比 Flex 更多的管道。

是什么阻止了 Silverlight MVVM 像 Flex 一样实现? Silverlight 在事件系统中是否具有相同的功能来做同样的事情?

如果是,为什么 Silverlight 做的事情更复杂,那有什么优势呢?是关于使用类型更强的类接口吗?

还有什么缺点?例如,对于 1 个 View-Model 实现 MULTIPLE VIEWS,Flex 实现是否也使其更加明显?

【问题讨论】:

  • 那篇文章的作者似乎不了解 DependencyObjects,所以我对他的观点有点担心(并不是说我做过的不仅仅是最简单的 SL 应用程序)。跨度>

标签: silverlight flash apache-flex model-view-controller mvvm


【解决方案1】:

有两件事确实使它变得更加复杂:

  • 实现 INotifyPropertyChanged
  • 命令

您可以在 Silverlight 中做的一件事是使用 "Property Weaver"。它将执行类似于 Flex 中的 [Binding] 标记的操作,因为它会自动获取公共 getter/setter 并使用 INPC 模式重新编写它们。

至于命令,DelegateCommands 中的包装方法被证明是很多管道。有几种方法可以解决这个问题。我喜欢基于约定的方法,您可以在其中声明一个名为 Execute_Something 的公共方法,并自动创建命令 Something 供您绑定。 HereHere

最后,Flex 中的绑定是基于表达式的,而 Silverlight 中的绑定纯粹是声明性的。当我们获得 C# v.Next 时,我有一些想法,我们也许可以很容易地进行基于表达式的绑定。

【讨论】:

  • 感谢您的回答,所以我们需要获得下一个 C# 呵呵!您能否也评论一下我关于 MULTIPLE VIEWS 的最后一个问题:)
  • 如果看起来很复杂stackoverflow.com/questions/5612263/…,如果不使用 INotifyPropertyChange 从头开始​​做 MVVM 怎么办?
  • 没有 INPC 的 MVVM 并不是一个真正的选择。你需要它来进行现实的双向沟通​​。至于v.Next C#,我们已经看到我们会把C#作为服务,这意味着我们可以做eval。有了它,我们可以将一些附加属性与其中的代码挂钩,并管理我们自己的绑定系统。不过,不要指望它来自 Silverlight 或 WPF。它必须发展为一个 OSS 项目或其他东西......
  • 我不明白“不要指望它来自 Silverlight 或 WPF。它必须发展为 OSS 项目或其他东西”?
【解决方案2】:

是什么阻止了 Silverlight MVVM 像 Flex 一样实现?

在 .net silverlight/wpf 中,一切都应该是透明的。绑定是一种通知机制,所以它应该“至少”像事件基础系统一样起作用。

如果是,Silverlight 为什么要这样做 比较复杂有什么好处 那么呢?

对我来说,这是一种心态,如果我知道它是一个事件基础系统,那么我应该小心使用它。不要过度使用它等。

案例:绑定转换器,在 flex 中很容易实现,而不是在 silverlight 中。

in flex: text="{getColor(pm.customerName)}" 是的,这非常简单,但问题是你确定你的 PM 会被垃圾回收正确释放,因为它是一个事件基础系统,谁负责观察变化? getColor 方法?或text 财产?或两者?真的很难知道。

in silverlight:text="{Binding CustmerName, Converter={StaticResources nameToColorConverter}}"我不用问谁负责观察,因为colorConverter只是一个绑定支持的转换器。我不需要担心内存泄漏。

所以,对我来说,这就是心态。

【讨论】:

  • 感谢这个深思熟虑的答案,这正是我正在寻找的 - 了解基础知识。但我不是很懂技术:为什么在第二种情况下“因为 colorConverter 只是绑定支持的转换器。我不需要担心内存泄漏”。我真的不明白。
  • 想象一下在 flex 中你如何观察方法所做的更改,flex 中的完整代码:在你的 getColor() 方法中你应该指定 [Bindable('customerNameChange')]。那么可观察的实际上是如何工作的呢?在silverlight转换器中是一个不可观察的简单对象,无需担心内存泄漏。
  • 至少如果[Bindable('customerNameChange')] 上面getColor()] 方法并不意味着flex 遵守getColor() 方法,它很容易混淆程序员。 [Bindable] 是什么意思。
  • 如果我理解我们不知道但内部 flex 应该知道并为我们释放内存?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
相关资源
最近更新 更多