Отойдем на некоторое время от деталей написания программного кода, чтобы взглянуть на него с точки зрения архитектуры. Как мы видели, программный код Python в целом автоматически образует системы, которые легко читать и сопровождать; он имеет простой синтаксис, в значительной мере освобождающий от нагромождений, создаваемых другими инструментами. С другой стороны, стиль программирования и архитектура программы часто могут не меньше, чем синтаксис, влиять на простоту сопровождения. Например, страницы переключателя «Hello World», представленного выше в этой главе, выполняют требуемую функцию, и «слепить» их удалось быстро и легко. Однако в существующем виде этот переключатель языков имеет существенные недостатки в отношении простоты сопровождения.
Представим, например, что вы действительно возьметесь за задачу, которую я предложил в конце предыдущего раздела, и попробуете добавить еще одну запись для языка COBOL. Если добавить язык COBOL в таблицу сценария CGI, это будет лишь половина решения: список поддерживаемых языков избыточно размещен в двух местах — в разметке HTML для главной страницы и в словаре синтаксиса сценария. При изменении одного из них другой не меняется. Фактически так и произошло, когда я добавлял пункт «Python2» в версию для этого издания (я забыл изменить файл HTML). В более широком случае эта программа не прошла бы придирчивого контроля качества по следующим параметрам:
Спи сок Выбора
Как только что было отмечено, список языков, которые поддерживает эта программа, находится в двух местах — в файле HTML и в таблице сценария CGI, а избыточность всегда усложняет сопровождение.
Имя поля
Имя поля входного параметра, language, жестко определено в обоих файлах. Если вы измените его в одном файле, то можете не вспомнить, что нужно изменить его также и в другом.
Ими та ция формы
В этой главе мы уже второй раз написали класс для имитации ввода из полей формы, поэтому класс «dummy» явно нужно сделать повторно используемым механизмом.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011