介于这次可能要加入条件语句与判断语句,原本的架构可能无法支持
如果要使用原架构,则相当于在 World 类中增加方法,以后可延拓性不强
因此我需要重新考虑一个,可延拓性更强的架构
【思路】
首先,原本的三个库的基本形式还是要保证的,同时加上一定的优化:
变量库(VariableRepository)
首先,考虑到变量类型的拓展,变量类型不在局限于整数,可能的还有:字符、布尔、实数、复数甚至 C++ 中不具有的分数。
因此,每个变量都需要开一个 vector 库;其次,除了变量名到地址的映射外,还需要建立一个变量名到变量类型的映射
数字库(NumberRepository)
规范数字的输入模式以及输出模式,添加乘法、除法、指数、对数运算
值库(ValueRepository)
由于定义的变量名本身不能歧义,即不能与关键字、数字冲突,也不能与定义过的变量冲突
而赋值语句时,右值需要依次判定是否为数字与变量,最后都是取值
因此,很大程度上,变量与数字有相似处,可以使用一个新的库合并
错误抛出库(ErrorRepository)
由于错误抛出占据了 World 很大的比重,故将之单独列出来,增强区块化与可读性
世界(World)
经过重新架构, World 应只是程序的集合,以及程序对外界指令的输入。其自身具有的方法,应尽可能少,避免降低可延拓性
经重新架构,我希望 World 仅需要以下方法:
- 输入指令的唯一渠道
- 调用其它类进行对指令的分析
- 调用其它类进行对指令的执行
- 调用其它类进行对指令的错误抛出
- 输出结果的唯一渠道
为了判定指令执行的成功性,所有非 World 的以上五类方法返回值均需设置为 bool 型;而原返回值改为引用形式