2013-09-19 2 views
-1

Я преподаю POPON OOP и разрабатываю программу для перевода базы данных DDL между базами данных СУБД (MSSQL Server, DB2, Oracle и др.). В основном программа принимает DDL-файл, тип исходной СУБД и тип целевой СУБД в качестве аргументов и генерирует целевой DDL по мере необходимости. Для того, чтобы реализовать поведение для перевода я могу думать только о довольно длительном и сложном наборе вложено, если заявления, например (только псевдокод):Рекомендации по шаблону проектирования Python для преобразования типов

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-х вариантов из многих типов опций для источника & цель?

ответ

2

Существует общее решение этой проблемы.

Предположим, у вас есть 200 исходных языков и 200 целевых языков. Вам понадобится 200 x 199 = 39 800 переводчиков. Это нелепо.

Так что вместо этого вы создаете промежуточный язык. Затем вы пишете 200 парсеров, которые переводят исходный язык на ваш промежуточный язык и 200 генераторов для перевода на желаемую цель.

Тогда у вас нет операторов switch. Для того, чтобы перевести программу p из исходного языка a целевого языка b Вы пишете:

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

В этом случае «язык», конечно, ваша DLL.

В стороне, вам действительно нужно писать собственные переводчики? Существует множество библиотек и фреймворков, которые могут делать некоторые очень интересные агностические базы данных. Как учебное упражнение, хотя письменные переводчики - это весело.

+0

Thanks Ray - хорошо выглядит. Это упражнение заключается в том, чтобы научить себя питону. –

Смежные вопросы