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

2024-10-01 09:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在自学pythonoop并开发一个程序来在DBMS风格(mssqlserver、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()

有没有人能提出一种模式,根据源和目标的多种选项类型的两种选择来简化这种逻辑?你知道吗


Tags: 程序类型目标ifis风格oracleddl
1条回答
网友
1楼 · 发布于 2024-10-01 09:37:33

这个问题有一个普遍的解决办法。你知道吗

假设有200种源语言和200种目标语言。您需要200 x 199=39800个翻译。这太荒谬了。你知道吗

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

那你就没有switch语句了。要将程序p从源语言a翻译为目标语言b,请编写:

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

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

另外,你真的需要自己写翻译吗?有许多库和框架可以做一些非常好的数据库无关的事情。不过,作为一项学习活动,写翻译是很有趣的。你知道吗

相关问题 更多 >