-1

我正在自学 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 种选择来提出一种可以简化此逻辑的模式吗?

4

1 回答 1

2

这个问题有一个通用的解决方案。

假设您有 200 种源语言和 200 种目标语言。您需要 200 x 199 = 39,800 名翻译人员。这是荒唐的。

因此,您可以设计一种中间语言。然后,您编写 200 个解析器将源语言翻译成中间语言,并编写 200 个生成器来翻译成您想要的目标。

那么你就没有 switch 语句了。要将程序p从源语言翻译成您编写a的目标语言:b

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

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

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

于 2013-09-19T00:30:07.560 回答