Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Пятничный клиент базы данных (Linux)  [new]
CEMb
Member

Откуда: Столько
Сообщений: 1994
+ с чего всё началось

CEMb: Кроссплатформа не нужна. C++ сам по себе кроссплатформенен. Когда мне вдруг понадобится, я просто соберу под линукс :)
Вселенная: Да нууу?!?... А ну-ка иди сюда... :\

В общем, есть у меня программа, под Windows, которая работает с базой через ADO, к программе можно подцепиться через DCOM и через внутренние методы объекта погонять данные. Суть в том, что DCOM в данной ситуации берёт на себя заботу о удалённом сервере, очереди подключений и прочей удалённой рутине. ADO же тут ходит в базу данных. Всё ок.

Но вот тут (см. спойлер) всплыла вероятность, что заказчик захочет это всё под линупс.

И тут встают несколько вопросов. Возможно, глупых.
1. Я бы для простоты сделал сервер, который руками запускается, слушает порт по listen и так далее. Но скорее всего под линуксом есть какие-то стандартные готовые паттерны/решения для создания/управления серверами?
2. ADO. Очень удобная универсальная штука. Но, что можно использовать под Linux?

Просто приложение довольно большое, не хотелось бы его портировать на другой язык, хотелось бы доработать и собрать под Linux. Я понимаю, что возможно "доработать и собрать" будет больше по объёму, но всё-таки сейчас там дофига просто логического кода, структур данных, запросов в базу и прочего - что к платформе не имеет отношения. Поэтому изначально хочется оценить, насколько сложно будет избавиться от DCOM и ADO?
16 апр 20, 12:42    [22117407]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49957

CEMb
насколько сложно будет избавиться от DCOM и ADO?

Практически невозможно.

Если твоё поделие не запустится под WINE или производными - в морг.

Posted via ActualForum NNTP Server 1.5

16 апр 20, 12:55    [22117422]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
CEMb

И тут встают несколько вопросов. Возможно, глупых.
1. Я бы для простоты сделал сервер, который руками запускается, слушает порт по listen и так далее. Но скорее всего под линуксом есть какие-то стандартные готовые паттерны/решения для создания/управления серверами?

Скорее всего нет. Я-бы сказал что в линуксе все проще. Нет разделения на приложения и службы. Чтобы
твой процесс стал сервисом его надо описать в скриптах /etc/init.d/*, /etc/* и может задать привегелии и на этом
пожалуй все.

2. ADO. Очень удобная универсальная штука. Но, что можно использовать под Linux?

Скорее всего аналогов нету. Можно попробовать съехать на ODBC под Linux. Хотя возможно для
твоего кода это будет некая деградация или упрощение. ADO должен быть более сложным и комплексным.

Со ссылкой на
https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

Просто приложение довольно большое, не хотелось бы его портировать на другой язык, хотелось бы доработать и собрать под Linux. Я понимаю, что возможно "доработать и собрать" будет больше по объёму, но всё-таки сейчас там дофига просто логического кода, структур данных, запросов в базу и прочего - что к платформе не имеет отношения. Поэтому изначально хочется оценить, насколько сложно будет избавиться от DCOM и ADO?

Вот то что выделено - очень хорошо. Вселяет некую надежду.

Я-бы предложил не решать эту задачу сразу а провести серию рефакторингов твоего кода. И разбить его
на 2 модуля. 1) Generic. Туда зайдут алгоритмы и структуры данных гетерогенные по отношению к С++
и бизнес задаче. 2) Windows-Spec. Туда зайдут какраз вещи прибитые гвоздями к ADO/DCOM.

В двух модульном варианте приложение должно 100% компилироваться и работать. Дальше - надо просто
провести некую умственную оценку объема работ по переписыванию модуля Window-Spec, в модуль Linux-Spec.

Тут уже рисков меньше будет. А будет такое себе поэтапное развитие.

Сообщение было отредактировано: 16 апр 20, 19:10
16 апр 20, 14:51    [22117500]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
White Owl
Member

Откуда:
Сообщений: 12501
CEMb
1. Я бы для простоты сделал сервер, который руками запускается, слушает порт по listen и так далее. Но скорее всего под линуксом есть какие-то стандартные готовые паттерны/решения для создания/управления серверами?
Зачем сервер? Какой сервер? Для DCOM? Ну.... в принципе, Wine делали аналог, не знаю правда насколько успешный.
Но это будет не linux-way, это в любом случае будет эмуляция и соответственно подтормаживать и давать странные глюки. Попробуй, может и взлетит, хотя-бы невысоко.

CEMb
2. ADO. Очень удобная универсальная штука. Но, что можно использовать под Linux?
Традиционно, используют нативные интерфейсы к БД. В последние годы набирает популярность ODBC. Особенно после того как Мелкомягие сдались и выпустили свой драйвер ОДБЦ для SQL Server.
Переход с ADO на ODBC будет не особо сложным. Достаточно будет сделать обертку функций в класс. За примером сходи в nanodbc Это не совсем ADO, но близко по духу.

CEMb
насколько сложно будет избавиться от DCOM и ADO?
От DCOM - не знаю, я с ним не работал. От ADO - легко.

А можно "усугубить" и перейти на .Net. А потом просто запускать под родным Мелкомягким dotnet. Оно правда уже с год как застыло на версии 3.1 и то что написано для 4.5 на Линуксе соответственно не запустится. Но то что писано для .Net 2 и 3 - бегает как родное.
17 апр 20, 05:15    [22117847]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
White Owl
Member

Откуда:
Сообщений: 12501
mayton
Я-бы предложил не решать эту задачу сразу а провести серию рефакторингов твоего кода. И разбить его
на 2 модуля. 1) Generic. Туда зайдут алгоритмы и структуры данных гетерогенные по отношению к С++
и бизнес задаче. 2) Windows-Spec. Туда зайдут какраз вещи прибитые гвоздями к ADO/DCOM.

В двух модульном варианте приложение должно 100% компилироваться и работать. Дальше - надо просто
провести некую умственную оценку объема работ по переписыванию модуля Window-Spec, в модуль Linux-Spec.

Тут уже рисков меньше будет. А будет такое себе поэтапное развитие.
Ну это совершенная классика! Подход оттестированный годами и фреймворками.

В самом тяжелом случае в проекте будет структура каталогов типа:
/src
/business
/platform
/windows
/linux
Копируешь свой исходник как есть в windows каталог, потом копируешь его-же в linux и начинаешь доводить linux версию до ума.
Потом перетаскиваешь логику работы одинаковую в обоих платформах на уровень бизнес-логики и в итоге исходники в платформенных каталогах должны истончиться. За примером... на хотя бы Qt глянь.

Сначала у тебя будет два набора сценариев сборки под разные компиляторы/среды. Потом вместо двух сценариев делаешь один, более умный, на makefile, CMake или их кузенах.
17 апр 20, 05:28    [22117850]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
CEMb
Member

Откуда: Столько
Сообщений: 1994
mayton
Я-бы сказал что в линуксе все проще. Нет разделения на приложения и службы.
это хорошо, спасибо.
mayton
Я-бы предложил не решать эту задачу сразу а провести серию рефакторингов твоего кода. И разбить его на 2 модуля.
Он уже разбит на три независимые библиотеки. Одна из них - для работы с БД, но через ADO. Разбивка, вроде бы, годная - я где-то месяц назад спонтанно решил сделать свой sql-navigator, но в любую БД, в какую может ходить ADO. И взяв эту библиотеку, сделал его за полтора дня.
White Owl
Зачем сервер? Какой сервер? Для DCOM?
Да, я уточню: у нас трёхзвенная архитектура, есть тонкий клиент, который ходит по DCOM в этот сервер, сервер ходит в базу через ADO, переправляет данные клиенту.
White Owl
Традиционно, используют нативные интерфейсы к БД.
Наверное, это знак :) Наша БД - Оракл, у неё есть свой SDK, меня давно подталкивали перейти с ADO на него. Наверно, этот момент настал. Просто вот с ADO хорошо получилось, я сделал удобную для себя библиотеку, с разными типами загрузки-выполнения запросов, с контейнером, который курирует запрос и ведёт жизненный цикл. И она (библиотека) мне позволила сделать в другом проекте удобное кеширование данный на стороне клиента в базе данных MSSQL(даже в любой базе, через ADO, ранее я спрашивал, про куда перейти с MSSQL, потому что её нет из коробки), поэтому мне не хотелось уходить от универсального интерфейса к нативному. Но, видимо, придётся написать отдельную Оракл-библиотеку. С другой стороны, это хорошая новость, потому что под Linux оно должно собираться без проблем.

White Owl
Сначала у тебя будет два набора сценариев сборки под разные компиляторы/среды.
Вот я подумываю о том, чтобы работать прям под Linux, чтобы избежать любых нестыковок, которые могут быть при сборке из-под Windows. Раньше я только с командной строки собирался :)
17 апр 20, 06:14    [22117854]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
White Owl
Member

Откуда:
Сообщений: 12501
CEMb
White Owl
Традиционно, используют нативные интерфейсы к БД.
Наверное, это знак :) Наша БД - Оракл, у неё есть свой SDK, меня давно подталкивали перейти с ADO на него.
[/quot]Есть. Называется OCI/OCCI (для С и С++). Но есть и ODBC драйвера, так что универсальность не теряется.

CEMb
White Owl
Сначала у тебя будет два набора сценариев сборки под разные компиляторы/среды.
Вот я подумываю о том, чтобы работать прям под Linux, чтобы избежать любых нестыковок, которые могут быть при сборке из-под Windows. Раньше я только с командной строки собирался :)
Да оно и сейчас с командной строки удобнее будет. Но никто же не запрещает сделать в IDE собственную клавишу запускающую make. Впрочем, большинство IDE такую клавишу уже имеет, достаточно только в настройках указать как именно называется сборщик или где он находится, если не стандартный.
17 апр 20, 16:03    [22118123]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный клиент базы данных (Linux)  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
CEMb
mayton
Я-бы сказал что в линуксе все проще. Нет разделения на приложения и службы.
это хорошо, спасибо.
mayton
Я-бы предложил не решать эту задачу сразу а провести серию рефакторингов твоего кода. И разбить его на 2 модуля.
Он уже разбит на три независимые библиотеки. Одна из них - для работы с БД, но через ADO. Разбивка, вроде бы, годная - я где-то месяц назад спонтанно решил сделать свой sql-navigator, но в любую БД, в какую может ходить ADO. И взяв эту библиотеку, сделал его за полтора дня.

Смотри. Я думаю что в форуме у нас уже закончились здравые предложения.
Тебе надо сесть и начать кодить. Напиши план что делать.

И по факту ошибок и проблем - приходить сюда и говорить на какой фазе ты находишся.

Еще просто для себя собери метрики сложности (Холстед и цикломатическая).
Они хотя-бы укажут где у тебя самый сложный модуль или процедура в 10000 строк.
Или где самый запутанный вложенный цикл. Холстед вообще выдает время в минутах
требуемое для освоения человеком смысла исходника. Понятное дело что время - среднее.
Гипотетическое.
17 апр 20, 16:28    [22118145]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить