类型转换的Python设计模式建议

时间:2013-09-19 00:21:47

标签: python oop design-patterns

我正在教自己Python OOP并开发一个程序来在DBMS风格(MSSQL Server,DB2,Oracle等)之间翻译数据库DDL。基本上,程序将DDL文件,源DBMS类型和目标DBMS类型作为参数,并根据需要生成目标DDL。要实现要翻译的行为,我只能想到一组非常复杂的嵌套if语句,例如(仅限伪代码):

if sourceDBMS is 'a'
     if targetDBMS is 'b'
          translateAtoB()
     if targetDBMS is 'c'
          translateAtoC()
if sourceDBMS is 'b'
     if targetDBMS is 'a'
         translateBtoA()
     if targetDBMS is 'c'
         translateBtoC()
if sourceDBMS is 'c'
     if targetDBMS is 'a'
         translateCtoA()
     if targetDBMS is 'b'
         translateCtob()

任何人都可以提出一种模式,根据源和数据的许多选项类型的2种选择来简化这种逻辑。目标

1 个答案:

答案 0 :(得分:2)

这个问题有一个普遍的解决方案。

假设您有200种源语言和200种目标语言。你需要200 x 199 = 39,800翻译。这太荒谬了。

所以你设计一种中间语言。然后你编写200个解析器,将源语言翻译成你的中间语言,200个生成器转换成你想要的目标。

然后你没有switch语句。要将程序p从源语言a翻译为目标语言b,请写下:

target = generators[b](parsers[a](p))

在这种情况下,“语言”当然是你的DLL。

顺便说一句,你真的需要自己编写翻译吗?存在许多可以做一些非常好的数据库无关的事情的库和框架。作为一个学习练习,写作翻译很有趣。