Design patterns 为了绑定而破坏LSP可以吗?
有些事告诉我,我问这个问题可能会被处以私刑。很抱歉之前的描述太冗长了 我正在做Silverlight 4项目中的一个角落案例。基本上,我正在构建的是一个自定义表单生成器 表单可能有几个不同类型的字段(文本、整数、电子邮件等)。现在,所有这些类型都扩展了Design patterns 为了绑定而破坏LSP可以吗?,design-patterns,data-binding,silverlight-4.0,mvvm,liskov-substitution-principle,Design Patterns,Data Binding,Silverlight 4.0,Mvvm,Liskov Substitution Principle,有些事告诉我,我问这个问题可能会被处以私刑。很抱歉之前的描述太冗长了 我正在做Silverlight 4项目中的一个角落案例。基本上,我正在构建的是一个自定义表单生成器 表单可能有几个不同类型的字段(文本、整数、电子邮件等)。现在,所有这些类型都扩展了字段类,但在文本字段中可能有额外的属性,如length 我可以在我的表单fieldsmanagementviewmodel中添加和删除字段视图模型集合中的字段。到目前为止,这些都是相当标准的东西 现在,。。。为了让用户针对字段对象设置属性,我有一个
字段
类,但在文本字段中可能有额外的属性,如length
我可以在我的表单fieldsmanagementviewmodel
中添加和删除字段视图模型集合中的字段。到目前为止,这些都是相当标准的东西
现在,。。。为了让用户针对字段对象设置属性,我有一个UserControl
,它具有类型为DataTemplate
的依赖属性,并表示在选择特定类型的字段时要显示的UI。因此,为了澄清,UserControl
有一个SingleLineTextTemplate
属性,当选择了SingleLineTextFieldViewModel
时将显示该属性,但当选择了EmailFieldViewModel
时,将显示EmailFieldTemplate
。SingleLineTextFieldViewModel
和EmailFieldViewModel
都继承自FieldViewModel
当我在每个模板中声明绑定时,就会出现问题。设置基类FieldViewModel
的属性非常有效(IMHO),比如IsRequired
和Position
,但是我在SingleLineTextTemplate
中还有与SingleLineTextFieldViewModel
的长度属性相匹配的Length
绑定。因此,我依赖于具体类的扩展接口,而不仅仅是FieldViewModel
类
在我继续之前,我应该指出这是有效的。我不确定它是否会,现在确实如此,我不确定它是否应该……或者我是否应该这样做
我这样做只是为了绑定,没有绑定到动态对象和/或Silverlight中缺少DataTemplateSelector
显然,SingleLineTextFieldViewModel
在绑定场景中不可替代它的基类。我的问题是,因为我不是在代码中使用这些对象,而是在标记中使用它们,……这仍然被认为是不好的做法吗
提前非常感谢。我不会有任何问题,我过去也做过同样或类似的事情
假设当DataContext
是SingleLineTextFieldViewModel
的实例时(可能是通过将DataTemplate
映射到该类型),只使用singlelinetextmplate
,则不会出现任何问题,由于绑定框架的弹性,即使您尝试将模板用于不合适的类型,也不会产生任何显著的负面影响。谢谢。这也是我的感觉。这样违反LSP让我有点紧张。