База данных Фасад, чтобы обернуть наши существующие запросы?

У нас есть очень большое приложение, написанное на C ++ с использованием среды MFC (миллионы строк кода). Не нужно говорить, что это устаревшая система, но она также поддерживается и обновляется. В этом приложении не хватает архитектуры. Например, у нас есть много классов, которые выполняют запросы непосредственно в базе данных, что создает большие трудности для модульного тестирования.

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

Моя идея идти к этому - создать нечто вроде фасада базы данных. Для этого будет 2 цели:

  1. Инкапсулировать все вызовы в базу данных за этим фасадом.
  2. Уметь проверять фасад в пакетном режиме для быстрого обнаружения ошибок в SQL.

Сам фасад базы данных будет реализовывать интерфейс IDatabaseXXXX, поэтому его можно легко высмеять в модульных тестах. Вторая цель будет состоять в том, чтобы иметь возможность запускать все функции на фасаде в пакетном режиме, чтобы проверить, есть ли ошибки в SQL-запросах. Я не считаю их модульными тестами и выполняю их только один раз в день.

Моя основная забота об этом заключается в том, что я не знаю, существует ли существующая структура или библиотека, чтобы позаботиться об этой абстракции. Насколько мне известно, на других платформах, таких как .NET, есть некоторые, но, похоже, для C ++ или MFC вариантов не так много. Как я уже сказал, приложение очень велико, и изменения будут выполняться медленно, в основном, когда к программному обеспечению добавляются новые запросы.

Я думаю, что неплохо добавить, что у нас также есть множество наборов записей (по одному для почти каждого объекта). На данный момент я не знаю, как с ними бороться, поэтому я сохранил их на стороне и решил разобраться с регулярными SQL-запросами. Но если у вас есть предложения по работе с наборами записей, я буду рад их услышать.

Итак, мой главный вопрос: стоит ли целая идея фасад базы данных? Есть ли библиотека рамок, которые помогут мне в этом приключении? Если есть программисты на C ++ /MFC, как вы относитесь к абстракции запроса к базе данных?

Спасибо!

ИЗМЕНИТЬ

Некоторые люди в чате предлагают посмотреть шаблон репозитория, который я знал из мира MVC 3. Любое предложение или учебник о шаблоне репозитория на C ++? Большинство из того, что я нашел, находится в мире .NET.

7 голосов | спросил Jean-François Côté 8 PMpMon, 08 Apr 2013 21:39:04 +040039Monday 2013, 21:39:04

2 ответа


1

Как и ваши обновления, шаблон репозитория сможет помочь отделить вызовы базы данных от вашего пользовательского интерфейса. И замена вызовов базы данных вызовами на интерфейс базы данных, безусловно, является улучшением. Шаблон репозитория позволит вам дополнительно абстрагировать извлечение данных во что-то значимое для приложения. UserRepository, ThingRepository и т. Д.

http://msdn.microsoft.com/en-us/library/ff649690.aspx

В качестве подхода к реализации этой архитектуры. Когда мне нужно сделать код, который можно тестировать для рефакторинга, первый тест всегда самый сложный. Найдите хорошо понятую часть кода, которую вы хотите протестировать, и сделайте этот класс /метод проверяемым. После этого настойчивость и терпение позволят вам выполнить задачу по внедрению новой архитектуры в устаревшую систему.

ответил Seth M. 11 J0000006Europe/Moscow 2013, 21:22:24
-1
  

Я прочитал книгу «Эффективная работа с устаревшим кодом» и один из самых важных   прежде всего, нужно создать некоторую архитектуру, чтобы мы могли отделить графический интерфейс от   логики и базы данных.

Вот как читать устаревший код, а затем переписывать систему на новой платформе. Но вы не можете честно ожидать, что на самом деле это сделаете в самом устаревшем коде. Добавление архитектуры к устаревшему коду после факта ... это просто не кажется возможным в реальном мире.

ответил junk 1 Mayam13 2013, 02:50:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132