首先,我同意 Chris McCabe 的观点,设计模式是一个指导方针、一个框架、一个建议。它们不是生死攸关的规则。话虽如此,您应该能够在不将“真实”业务逻辑引入 UI 的情况下加入两者(VM/Telerik)。
第一种可能性是在控制器上使用事件。UI 可以订阅此事件以将调用转发到 Telerik 控件;但是,UI不应决定何时调用它。
class MyModel {
public event EventHandler StopRefreshLoading;
}
class myForm : Form {
public myForm(MyModel data)
{
data.StopRefereshLoading += (o, e) => this.CustomControl.StopPullToRefreshLoading(true);
// ... etc
}
坦率地说,我更喜欢使用接口来处理这种类型的行为。然后控制器很容易强制实现更新到新的合同要求。缺点是接口在复杂的 UI 中可能变得过于冗长,从而难以为其编写测试。
interface IMyModelView {
void StopRefreshLoading();
}
class myForm : Form, IMyModelView {
void IMyModelView.StopRefreshLoading()
{
this.CustomControl.StopPullToRefreshLoading(true);
}
无论你往哪个方向走,都可能会出现一些违反 UI 设计模式的情况;然而,在现实世界中,严格遵守特定模式是没有意义的。这些模式有助于使代码更加可靠、可测试、灵活等等。决定你为什么使用一个模式,你将能够评估何时可以安全地违反该模式。