我有一些相当复杂的表格,需要由网页设计师配置。
我一直在构建一些似乎正在完成工作的复合控件。
顶级控件只是一个容器,表单的各个部分都包含在其中。 SubControls实现通用接口,(即NeptuneAddressControl和MarsAddressControl实现IPlanetaryAddressControl)
最终,一切都需要进入同一个数据库。
我没有将子控件的每个字段暴露为父控件中的prop,而是考虑实现一个跨越控件树的Visitor,并填充一个可以写入数据库的Entity Object。
这是正确的方法,还是我离开基地?
答案 0 :(得分:1)
我认为使用属性映射和访问者之间的权衡是实现访问者需要了解所有可能属性的类,而处理映射的代码可以独立于表单/ DB的内容
使用访问者,当您将新类型的数据添加到结构中时,您将获得代码无法编译的好处,因此如果您要更改复杂结构,编译器可以帮助您。
如果稍后添加新字段或控件,则属性的好处可能会导致代码量较少而无需更改中间层,具体取决于您可以使用该代码的通用程度。
我想还有其他选择,但我认为访客的方法是有道理的。您可能希望执行特定于控件的操作,例如通常难以编码的专门验证,因此任务将更容易,并且应该更好地防止由于控制结构的更改而导致的隐藏错误。