模式作用域:初级读本和最佳实践
2010-10-22 17:18:49 来源:WEB开发网如果您想要高度的重用,还想最大可能地隐藏名称空间,那么请使用 Venetian blinds 风格。然后可以使用 elementFormDefault 作为一个切换开关,来要求暴露或隐藏元素。
此外,不要害怕混用。在特定的模式中使用多种模式设计范式是高度有益的。对于您希望保持为私有和隐藏的结构部分,使用 Russian doll 风格。同时,您也可能想要使用 Salami slice 或 Garden of Eden 设计全局地暴露一些元素。例如,清单 13 使用了高度暴露的 Garden of Eden 风格和隐藏的 Russian doll 风格:
清单 13. 混用范式
<xs:schema>
<!-- Garden of Eden style component -->
<xs:element name="Title" type="xs:string"/>
<xs:element name="Body" type="xs:string"/>
<xs:element name="Section" type="section.type"/>
<xs:element name="HelpDocs" type="helpdocs.type">
<xs:complexType name="section.type">
<xs:sequence>
<xs:element ref="Title"/>
<xs:element ref="Body"/>
</xs:sequence>
<xs:attribute name="name"/>
</xs:complexType>
<xs:complexType name="helpdocs.type">
<xs:sequence>
<xs:element ref="Section"/>
<!-- Russian doll style component -->
<xs:element ref="Credits">
<xs:complexType>
<xs:sequence>
<xs:element name="Author" type="xs:string"/>
<xs:element name="Year" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:complexType>
</xs:schema>
在此场景中,也许您需要暴露 HelpDocs、Section、Title 和 Body 元素,以便其他模式使用。但是,您想要隐藏 Credits 元素,以防止它与其他模式定义耦合。
如果重用的需求不是十分迫切,那么用这种方式编写模式是完全合理的。通过让元素成为全局的,很容易增加暴露。后面去掉暴露将会很困难。在这种情况下,如果未来设计需要更多的暴露,您可以很容易增加。
结束语
在开始任何模式项目之前,您必须做出符合自己目标的设计选择。通过理解模式作用域的使用,可以流水线化管理模式和内容的过程。最终,这将提升您的能力,来管理模式生命周期和让您的模式高效地与其他系统交互。
更多精彩
赞助商链接