前言
上回我们已经得到了简单类图,这次就来细品一下每个类应该长什么样,需不需要再增加辅助类。
加入公有成员
首先来给每个类加入成员:
- Lexer:词法分析器的任务是把Json字符串转换成单词流,只有一个方法Analyze。
- Token:单词显然是一个值对象,只有Value和TokenType两个只读属性。考虑到值类型的效率比引用类型高,把Token设计成结构体会更好。
- Parser:语法分析器的任务是把单词流转换成C#对象,所以应该有一系列的ToObject方法。
- Serializer(序列化器):考虑到把序列化的责任也扔给Parser并不妥当,我们新加入一个负责序列化的类,这个类应该只有一个ToJson方法。
- JsonMapper:整个系统只做两件事:序列化和反序列化,因此JsonMapper应该包括序列化方法ToJson和反序列化方法ToObject(三个)。
添枝加叶
考虑一些实际情况,再次对系统结构进行调整:
- 词法分析器无状态,不需要多个实例,不需要使用多态,不需要暴露给外部,这样的类最适合直接实现为静态类。
- 大多数情况下,用户都只会使用基础功能,而不会用到自定义特性和委托这些高级功能,而高级功能的实现不免需要额外的时间和空间。如果把基础功能和高级功能糅合在一起,就会无形中增加那些只需要基础功能的用户的负担。所以我们使用多态将两者分离开,当用户只需要基础功能时&#x