metaclass: (Default)
[personal profile] metaclass
а получается то автомат, то пулемет, то, идрить его налево, термоядерная боеголовка.

Есть задание - переписать в старой системе ведомость. Использовать встроенный в нее редактор меня давно задрало, глючен, неудобен в обслуживании и язык кривой и не объектный. Но ведомость была на нем написана, года три как уже и даже работала, с определенными ограничениями. Но не всех устраивала, сложно обслуживалась, etc. В общем, задрала вусмерть.

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

И начал я ее делать. Изначально собирался наполовину в лоб, наполовину обобщить - т.е. все обертку (подключение к базам старой системы, выбор рабочих параметров, GUI) сделать обобщенным, а к ней подгружать
закодированный в виде наследника от простого базового класса в лоб написанный алгоритм расчета этой ведомости. Базовый класс совсем тупой, виртуальные методы типа SetDBPaths, SetLoadParams, Load.
В лоб делал, потому что система не имеет sql запросов и базы обрабатываются тупым перебором. И то это получается быстрей, чем внутри нее самой делать. И парсера-движка SQL я готового так и не нашел.

Короче, не знаю я, что на меня нашло, похоже переработался совсем, но в процессе написания получилось следующее:

Наследник базового класса грузит другой класс, непосредственно выполняющий всю работу и служит для него фасадом. При этом класс загружается указанный в конфиге и все общение с тем классом идет через интерфейс. При этом оный класс может быть как влинкован в исполняемый файл программы, так и загружаться из заданной в конфиге dll. Сделано так для упрощения отладки, когда класс влинкован в прогу, и для упрощения обновления проги(класс будет грузится из dll). Эксперимент с двойным вариантом загрузки класса увенчался успехом. Это еще ладно.

Внутри загружаемого класса реализован безумный язык запросов к базам старой системы на базе XML. Умом понимаю, что бред, но ничего поделать не могу - так получилось :) Из набора таблиц старой системы генерит датасет с объектами, в том числе вложенными(произвольного уровня), типа "шапка документа-строки документа", поддерживает группировку и аггрегатные функции типа min,max,total,list. Причем выходной датасет может быть не один, а несколько, т.е. фактически выполняется несколько запросов за один проход по таблице.

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

Вывод: надо идти в отпуск, иначе я скоро на просьбу сложить 2+2 буду выводить с нуля теорию чисел.

Date: 2007-07-08 09:53 pm (UTC)
From: [identity profile] medvedd.livejournal.com
Стремление сделать ХОРОШО ещё не отбито дубинами реалий жизни. И это хорошо!

Date: 2007-07-09 06:23 am (UTC)
From: [identity profile] vp.livejournal.com
На самом деле единственно правильный способ был бы, как ты говорил, параллально привязать некий маппер на нормальный SQL сервер. Но такое хрен будет, т.к. доступа к серверу нету и не будет.

Date: 2007-07-09 08:33 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да это змеи какие-то, я, честно говоря, уже даже начинаю подозревать некие политические причины, по которым доступ не дают.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2025 07:20 pm
Powered by Dreamwidth Studios