Каковы лучшие практики для разработки базы данных с Delphi?

Я рекомендую использовать Spring @ControllerAdvice для обработки ошибок валидации. Прочитайте это руководство для хорошего введения, начиная с раздела «Обработка ошибок Spring Boot». Для углубленного обсуждения есть статья в блоге Spring.io, которая была обновлена ​​в апреле 2018 года.

Краткое описание того, как это работает:

  • Ваш метод контроллера должен возвращать только ResponseEntity. Он не будет нести ответственность за возврат ошибок или ответов об исключениях.
  • Вы реализуете класс, который обрабатывает исключения для всех контроллеров. Этот класс будет помечен @ControllerAdvice
  • Этот класс совета контроллера будет содержать методы, помеченные @ExceptionHandler
  • Каждый метод обработчика исключений будет настроен для обработки одного или нескольких типов исключений. В этих методах вы указываете тип ответа для ошибок
  • Для вашего примера вы объявили бы (в классе рекомендаций контроллера) метод обработчика исключений для ошибки проверки. Тип возвращаемого значения будет ResponseEntity

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

12
задан pnuts 24 November 2015 в 12:53
поделиться

6 ответов

У меня есть собственная инфраструктура Delphi / MySQL, которая позволяет мне очень быстро добавлять «новые экраны». Я не буду делиться этим, но могу описать свой подход:

Я использую интерфейс с вкладками и иерархию на основе TFrame. Я создаю вкладку и привязываю к ней TFrame.

Я беру на себя всю грязную сантехнику и элементы управления параллелизмом, используя стандартную реализацию хранимой процедуры mysql. CustomerSEL, CustomerGET, CustomerUPD, CustomerDEL и т. Д. TMFrame - мое происхождение, с реализациями интерфейса, захватывающими OnShow, OnHide и некоторые другие особенности

- TWebBrowserFrame --TDataAwareFrame --TObjectEditFrame --TCustomerEditFrame --TOrderEditFrame и т.д... --TObjectListFrame --TCustomerListFrame

и т.д ...

и некоторые диалоги ..

TDialog TMDialog --TDataAwareDialog --TObjectEditDialog - TContactEditDialog и т.д.. --TObjectSelectDialog --TContactSelectDialog

и т. Д.

Когда я добавляю новый объект для управления, это может быть новый атрибут клиентов, скажем, мы хотим отслеживать, какими автомобилями владеет клиент.

создать таблицу CustomerVehicles Я запускаю свой специальный генератор sproc, который создает мои SEL, GET, UPD, DEL проверить эти ...

Унаследовать от базовых классов, упомянутых выше, отбросить некоторые элементы управления. Добавьте вкладку в TCustomerEdit.

Delphi всегда имеет набор данных в качестве абстрактного уровня, предоставьте его своему графическому интерфейсу через источники данных. Добавьте набор данных в модуль данных клиента и «зарегистрируйте его». Моя собственная настраиваемая функция в моем производном классе модуля данных, TMDataModule

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

Обычно я могу добавить новый объект, построение sprocs, добавление экранов обслуживания в течение часа.

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

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

НЕОБХОДИМО - Будьте осторожны, планируя свой VFI! Как кто-то упомянул, если вы хотите изменить имя компонента в одном из родительских классов, будьте готовы к неприятностям. Вам нужно будет открыть и «отредактировать» каждый дочерний элемент в иерархии, даже если вы очистите DCU, у вас все равно будет ад DFM. Могу заверить вас, что в 2006 году это все еще проблема.

НЕ создавайте один монстр-модуль данных

НЕ торопитесь с предварительным дизайном, рефакторинг после того, как вы создали тонну зависимых, может быть забавной задачей, но кошмар, когда нужно быстро получить что-то новое!

4
ответ дан 26 October 2019 в 10:46
поделиться

Будьте очень осторожны, если вы используете подход «поместить все объекты БД в один модуль больших данных» (или «несколько больших модулей данных» в огромных приложениях). Это может сделать ваш проект с модулем данных настолько большим, что вам придется использовать HD-монитор, чтобы увидеть все TXDataset в этом модуле данных
Итог: переходите на использование специализированных классов для бизнес-логики вместо модулей больших глобальных данных. Используйте модули глобальных данных с логикой ТОЛЬКО в очень небольших проектах.

4
ответ дан 26 October 2019 в 10:46
поделиться

Хорошо , Я настоятельно рекомендую вам использовать Действия (TActionList) при разработке пользовательского интерфейса. Существует множество предопределенных действий, включая следующие / предыдущие / вставки / удаления / редактирования / обновления, которые можно выполнять с наборами данных, поэтому рекомендуется использовать эти действия и связывать их с кнопками / меню в ваших формах. Это предотвращает повторение кода для логики пользовательского интерфейса.

Нет необходимости в генераторе CRUD для Delphi !! Добавьте TDataSource, TDBGrid и TActionList в форму, добавьте предопределенные действия источника данных в список действий, свяжите эти действия с кнопками или меню,

4
ответ дан 26 October 2019 в 10:46
поделиться

Использовать VFI (наследование визуальной формы). Разработайте стандартную форму БД. Например, пустой DataSet, DataSource, PageControl, состоящий из 2 листов. Сначала будет пусто, позже вы добавите элементы управления для редактирования данных в дочерних формах. Добавьте DBGrid на второй лист. Остерегайтесь, это не способ ООП, но он простой и быстрый.

2
ответ дан 26 October 2019 в 10:46
поделиться

Я бы посмотрел на Аннотация данных от Remobjects.

2
ответ дан 26 October 2019 в 10:46
поделиться

Для Для больших приложений я использую структуру сохранения объектов tiopf . Это позволяет мне работать с объектами, а не наборами данных, и легко менять базы данных. Большая часть моей бизнес-логики переходит в модель бизнес-объектов (BOM), и мои формы довольно тупые. У tiopf есть несколько способов связать спецификации с формами; управление с учетом стойкости, Ttidataset для элементов управления с поддержкой данных и классы Mogel Gui Mediator для подключения к обычным элементам управления.

Для небольших и быстрых приложений я просто использую модули данных и компоненты базы данных. Главное помнить следующее:

  • Поместите как можно больше кода в модули данных (и как можно меньше в формы).
  • Используйте несколько модулей данных с разбивкой по функциям, например, модуль электронной почты, модуль дохода, Модуль выставления счетов ...
  • Тест, тест, тест
3
ответ дан 26 October 2019 в 10:46
поделиться
Другие вопросы по тегам:

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