Web打印(2),打印核心架构--XML分析器及打印元素UML类图,接口及实现
为了WinForm打印、Web打印调用的一致性,方便移植性,减少调用代码的修改量, 并且保证UML类图的完整性,用JavaScript定义了C#定义的接口IXmlParser。接口只有一个方法Parse(),即实现分析,并返回一个接口对象。
- XML分析器及打印元素UML类图 powerdesigner对象模型文件下载GoldPrinter.XmlParser.oom
- XML分析器在Visual Studio中类视图,用C#.Net实现,接下来,一步一步用纯JS实现
- IXmlParser分析器接口
接口,大家知道,在.Net中有接口概念,即规定了类要实现的属性和方法等。C#是一个强类型的完全面向对象的语言,在定义变量、方法的参数时,要求指定对应的类型,在编译时会严格检查类型是否一致,不一致不能编译通过,特别是方法的参数类型,为了程序的灵活性,有一句话要记住:针对接口编程。例如我们在定义方法时,方法的参数类型,在调用时编译器要进行类型检查,看传递的参数类型是否一致,此时,我们可以指定具体的类形,签于C#的强类型特点, 但又限制了程序的灵活性,此时接口作为参数,编译器进行类型检查时,如果类形实现了接口,或类型是此类型的基类,则编译通过。
下而是C#代码实现的UML类图中的IXmlParser。namespace GoldPrinter.XmlParser { /// <summary> /// 表示分析处理用XML节点描述特征的对象的接口。 /// </summary> public interface IXmlParser { /// <summary> /// 当指定的XMLNode不为空时,分析处理用XML节点描述特征的对象。 /// </summary> IXmlParser Parse(); }//End Interface }//End NameSpace
但是Javascript不是强类形的,严格来说也不是面向对象编程语言。函数定义参数时不必指定类型,给我们编程灵活的同时,也下了一个套,有些错误不能进行编译检查,只有在运行时才能冷不丁的爆出大bug。下面用JavaScript定义了IXmlParser。
/* * 表示分析处理用XML节点描述特征的对象的接口。返回IXmlParser */ jXmlParser.IXmlParser = function () { //当指定的XMLNode不为空时,分析处理用XML节点描述特征的对象。 this.Parse = function () { GoldPrinter.Throw.Msg("这是IXmlParser的Parse() ,接口类不要实例化!\r\n类型:" + typeof (this) + "真实类名" + this.GetType()); return this; }; //模拟C#,获取实例的类型,js如果不实现,都返回object this.GetType = function () { return "GoldPrinter.XmlParser.IXmlParser";}; }
在上而的代码中,jXmlParser.IXmlParser实际全称是GoldPrinter.XmlParser.IXmlParser,为了简写,借用了C#的方式
using jXmlParser = GoldPrinter.XmlParser;
在JS中的实现是
var jGoldPrinter = GoldPrinter.Drawing;
C#的基类是object,有一个GetType()用于返回当前类的类型。所以在JS实现的时候因为js的object没有此方法,所以在JS中把GetType()相应的加上了。
-
接下来的博文,我们将用JS,模拟C#的名字空间、面向对象类、类的继承、类的实例化调用等面向对象编程。