- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我会在这里发帖,希望也许有 MVVM 专业知识的人能够就以下是否是一个好主意提供意见:
我正在使用 Sacha Barber 的 Cinch MVVM 框架,其中包括 Marlon Grech 的 SimpleCommand 类。
这个类没有其他替代品的一个属性是 Text 属性,它通常可用于将 UI 元素绑定(bind)到命令操作的“标题”。因此,我一直在为这个类编写一个扩展,它公开了一个 Text 属性。
现在,我遇到的是一个用例,我使用命令来切换与设备的连接。有很多不同的方法可以实现这个(并不总是存在 - 它是软件!)。一种方法是从我的 ViewModel 中公开多个命令对象——一个用于“断开连接”,一个用于“连接”;让 View 模型公开一个指示连接状态 (IsConnected) 的属性,并让 View 有条件地绑定(bind)到 Connect 命令或 Disconnect 命令。不过,我对这个选项的 react 是……糟糕!
我最初开始关注的不仅是提供一个 Text 属性,而且还让命令对象实现 INotifyPropertyChanged ,以便 View 模型可以根据系统状态将文本属性动态更改为“连接”或“断开连接”。这样做,我可以避免使用多个命令,而只公开一个“ToggleConnection”命令对象。
不过,从这条路开始,我突然想到,这种模式可能还有其他变体,因此 UI 需要根据命令状态进行更改。例如,除了根据连接状态更改命令的文本外,您可能还有一些地方需要根据连接状态更改图标。因此,我开始编写一个实现 INotifyPropertyChanged 的“有状态”类,并公开两个属性——“文本”和“状态”。我已将类设为通用类,以便用户可以定义 State 的类型(我通常不喜欢在可避免的情况下使用“对象”)。
我的问题是......你认为这是一个好主意还是坏主意?它可能与命令的初衷/设计有所不同;从我所看到的情况来看,一般来说,命令对象可能是无状态的,因为它们是系统的“动词”。使用路由命令,如果我理解正确,通常只期望命令的目标具有状态。特别是因为可以根据声明命令绑定(bind)的位置将相同的命令路由到不同的处理程序。
所以,我认为至少对于路由命令,状态是没有意义的。
但是,我不是在处理路由命令——我是在专门处理 MVVM 命令。在这种情况下,基本上没有命令的条件路由 - MVVM View 直接绑定(bind)到特定 View 模型的命令对象,它是执行和可以执行的处理程序。
在这种情况下,这有意义吗?
我已附上相关代码的副本,以防它有用/感兴趣。
谢谢,
菲尔
最佳答案
这真的取决于你认为什么会更容易使用。
我个人不会将 .Text 属性放在我的命令上,因为我无法重用这些命令。它与框架中提供的 RoutedUICommands(或类似的自定义静态命令)不同,因为它们在任何地方都被重用,如果“退出”的翻译在该命令上发生更改,它将反射(reflect)在整个应用程序中。在您的示例中并非如此 - 一切都是一次性的。
在您的情况下,您的按钮文本的此文本确实与您的命令分离(即使一个会影响另一个),因此最终可能会更容易并且将它们分离的代码更少,但差异不会这么多,它最终将成为一个比什么都重要的品味问题。
在 2 个命令的问题上,我绝对支持你 - blech。您编写的大多数按钮代表都必须以某种方式对状态使用react(您与之交谈的服务已关闭,如果用户选择了此数据,则需要以这种方式填充此数据,等等),所以我真的不认为这是错误的委托(delegate)适应 ViewModel 上的状态信息。
无论如何,这有点罗嗦......外卖是“做任何感觉舒服的事”。
关于wpf - MVVM 和有状态命令 - 好主意还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324309/
我正在更新一个旧的经典 ASP 站点并且我需要存储密码,因此考虑到经典 ASP 的局限性,我对如何处理这个问题自然有点过于谨慎。 我同时使用盐和胡椒(胡椒是存储在服务器上而不是数据库中的常量),我只是
我已经设置了我的数据库来记录每次失败的登录尝试。我以为我会将失败尝试的次数乘以 0.05 秒之类的。就像是: time_nanosleep(0, (50000000 * $fa
我想测量 1GB LAN 上消息代理的广播消息延迟。 消息以 pub sub 方式传输,一个发布者,多个消费者。生产者使用系统时钟(C# 中的 DateTime.Now)为每条消息加上时间戳,消费者通
我正在尝试学习代码契约并了解它们的用处。 我有一个 WPF 应用程序,因此很多代码注定要在 UI 线程上独占运行。相当多的实用程序类期望仅从 UI 线程调用。 在我的代码中加入这些是个好主意吗?为什么
我加入了一家小公司,该公司主要销售一种网络应用程序。 Web 应用程序中的数据非常敏感,以至于所有数据都经过字段级加密。应用程序使用 ASP.NET Web API 2(C#) 编写,前端为 html
对于我网站的后端,只有少数人可见,我有一个系统,通过 ajax 与 php 进行通信,如下所示: function ajax(url, opts) { var progress = false
我们有相当大的文档集,我们希望我们的用户能够查看和过滤这些文档。为了加快速度,我们只向客户发送有限数量的文件。但是,由于我们确实需要客户端能够过滤文档,因此我们需要一种方法来发送他们可以过滤的键和值。
我从 14 岁起就开始阅读游戏引擎书籍(那时候我什么都不懂:P)几年后,我想开始为我的游戏引擎编写数学基础。我一直在思考如何设计这个“图书馆”。 (我的意思是“有组织的文件集”)每隔几年就会出现新的
我们正在使用 Rails 为餐厅构建 SaaS 后端。我们直接与 POS 集成,因此每个 POS 不断发送我们存储的客户订单以供以后处理。我们在大约 1,000 个地点进行了这种 POS 集成,每月向
我正在设计一个系统,但我认为让最终用户能够删除数据库中的条目并不是一个好主意。我是这么认为的,因为通常最终用户一旦获得管理员权限,最终可能会在数据库中弄得一团糟,然后求助于我来修复它。 当然,如果他们
我正在考虑使用 RESTful Web 服务构建应用程序。我的想法是将应用程序的 RESTful(json 等)部分构建为独立的,然后将前端(例如 html/css/js/等)构建为该服务的客户端,虽
我有一种情况,我要保留对需要持久化的 ivar 的引用。在一个对象中,我有一个指向另一个对象中的 ivars 的指针数组,这些指针在程序的整个生命周期中都被使用。换句话说,我不只是传递一个引用来检索一
有没有prototype没有任何 DOM/ajax 部件的 fork?我真的更喜欢 jQuery,并且不想背负额外的包袱。到目前为止,我一直在使用优秀的 JS.Class库,它甚至不触及内置类原型(p
我正在从事的项目需要我编写大量重复代码。例如,如果我想在我的代码中加载一个名为“logo.png”的图像文件,我会这样写:位图标志图片; ... // Init logoImage = load("l
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
我有一个小型网站,大约有 5-10 名管理员。我已将其设置为监视每个管理员正在做什么(添加项目、删除项目等)。我在我们的管理面板中有一个列表,显示了集体管理部门之前执行的 10 项事件。今天,我决定每
我看到将 PostgeSQL 数据库转储到一个大 SQL 文件中,然后提交并推送到远程 Git 存储库的方式可能是一个了不起的备份解决方案:我获得了所有版本的历史记录、散列、安全传输、单向(真的很难通
我正在开发一个需要本地化和国际化的 Web 应用程序。我突然想到我可以使用依赖注入(inject)框架来做到这一点。假设我声明了一个接口(interface) ILocalResources(在本示例
更新 :正如我所料,社区针对这个问题给出的合理建议是“衡量并观察”。 chibacity posted an answer一些非常好的测试为我做了这件事;同时,我自己写了一个测试;我看到的性能差异实际
我想知道使用 new 运算符创建对象但不将返回的对象分配给任何变量是否是个好主意。本质上,我只是在同一行中调用这些方法。例如: new Object().ToString(); 好吧,我知道上面的行不
我是一名优秀的程序员,十分优秀!