• 从写组件说Xml——接口和初步实现(四)


        前面三篇把Xsd已经定义好了,这时,对组件开发者和组件使用者而言都已经知道xml将是一个什么样的了。但是组件的使用者依然无法全面开始工作,因为他们不知道如何让这个xml真正跑起来。

        因此,这一篇就讲一下,如何定义接口(这里的接口是泛义的接口。在这一篇的第一、第二节暂时忘了Xml)。

    1.定义接口

        快速定义接口的方式,就是利用类关系图,创建接口:

    image

        一开始,当然需要定义一个入口:

    image

        定义一个Create方法:

    image

        但是Create的返回类型还没定义:

    image

        Engine自然要有执行方法:

    image

        到这里,已经可以告诉组件的使用者,一切都准备好了,现在可以并行工作了。

    2.定义更详细的接口

        当然,接口远还没有完成,来回想一下,前面三篇都引入了哪些概念:

    • Configuation
    • Slide
    • 各种Modification
    • Conditionable
    • 各种Expression
    • 各种Container
    • Variable
    • Statement
    • CliFunction

        这些可以进一步抽象成下面几个接口:

    image

        但是,这里各种变量和参数都不知道如何传递,再补上一个执行上下文:

    image

        当然,这个ExecutionContext可以有几种方式来保存Current值:

    • 如果在整个执行引擎的执行过程中不会出现多线程,那么ThreadStatic将是最佳选择
    • 如果会出现多线程,那么就不能用ThreadStatic,而要改用Context的方法保存

        无论选择哪种,目的仅仅是为了让ExecutionContext.Current在任何时候下都可以提供数据。

        最后,就是为了PInvoke而定义的CliFunction所需要的接口:

    image

        所有的接口都完成了,就10个类型,是不是出奇的简单?

    3.生成类型

        感谢xsd.exe这个工具,使大部分实现可以使用一个非常简单的命令来完成:xsd /c pptx.cnblogs.xsd

        这时xsd.exe就会生成一个pptx_cnblogs.cs的文件,先改名成pptx.cnblogs.cs,再把文件添加到工程中。在vs2008中打开文件,其内容如下:

    image

        然后对这个文件做下面几个修改:

    • 添加namespace(除非确认默认namespace就是所需要的namespace)
    • 删除/注释DebuggerStepThroughAttribute(否则以后debug时会遇到麻烦)
    • 如果还需要做计算代码度量值,那么还要删除/注释GeneratedCodeAttribute

        仅仅利用这个文件,就可以非常简单的从xml反序列化成对象:

    image

        在时间紧张的情况下,这是最方便快捷的方式(当然在第六篇里面将会说到这个方式的缺点,以及用其它方式读取xml)。

        现在,一切都已经准备就绪,下一篇就可以进入组件的编码阶段了。


    上一篇:从写组件说Xml——Xsd篇(三)

    下一篇:从写组件说Xml——实现(五)


  • 相关阅读:
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    iOS 屏幕旋转 nav+tabbar+present(网页) 2016
  • 原文地址:https://www.cnblogs.com/vwxyzh/p/1578145.html
Copyright © 2020-2023  润新知