Любые предложения по разделению доступа к данным, бизнес-логики и графического интерфейса в Delphi

Я хочу отделить уровень данных от бизнес-логики и бизнес-логику от графического интерфейса. Погружаясь в Интернет, я наткнулся на несколько ресурсов, но все еще не мог прояснить свое мнение. Некоторые люди говорят о паттернах, другие указывают на различные рамки. Мои требования:

  • манипулировать данными из rdbms (в основном mysql) Операции CRUD
  • работа с генерацией идентификатора (должен ли я использовать автоинкремент, предоставленный механизм данных или сгенерированный паскальский код)
  • отношения таблиц могут быть логическими (ссылочная целостность не используется) или нет
  • необходимость в способности генерировать объектные отношения из модели данных
  • данные должны быть преобразованы в бизнес-объект, а бизнес-логика должна быть изменена
  • должны использоваться существующие компоненты графического интерфейса или бесплатное программное обеспечение

Что мне нужно:

  • некоторые руководящие техники / предложения с базовым образцом кода / макетом приложения (например, модули-классы-модули-каталоги) ... Не будучи экспертом в ООП, я запутываюсь, когда мне нужно разработать иерархию классов
  • простой фреймворк с учебником
  • или даже ваш собственный ежедневный код / ​​фреймворк / подход

person Community    schedule 08.05.2009    source источник


Ответы (7)


Поскольку вы используете Delphi, обязательно посмотрите DataModules. Здесь вы размещаете компоненты и логику доступа к базе данных.

Поместите классы в простые файлы "Unit".

Сделайте так, чтобы пользовательский интерфейс разговаривал с этими двумя, чтобы все происходило. Вы можете использовать компоненты доступа к базе данных непосредственно в форме, но лучше всего это делать в режиме «только отображение» и использовать модуль данных для выполнения операций с данными. (Вы можете делать все, что указано в форме для базовых приложений, но если вы хотите сделать приложение модульным, целесообразно держать его отдельно).

person mj2008    schedule 08.05.2009

Один из простых способов обеспечить такое разделение - написать модульные тесты для вашей бизнес-логики. Помимо других (существенных) преимуществ, возможность тестирования кода означает, что он не может (намеренно или иначе) быть тесно связан с пользовательским интерфейсом.

Я пытаюсь (но не всегда удается) хранить детали уровня данных отдельно, используя ClientDataSets, независимо от того, что используется в серверной части (обычно DBExpress или DBISAM). Я также пытаюсь написать хотя бы несколько интеграционных тестов, чтобы убедиться, что уровень данных работает должным образом (отдельная тестовая база данных с известными значениями).

При наличии бизнес-логики и данных (даже частично) пользовательский интерфейс становится намного проще. И ремонтопригодный.

person Bruce McGee    schedule 08.05.2009

Взгляните на tiOPF

person ErvinS    schedule 09.05.2009

Лично я использую tiopf для бизнес-модели. Tiopf предоставляет уровень доступа к данным. Последний код из репозитория включает структуру model-gui-mediator, аналогичную MVC, для отображения модели. Это позволяет отображать данные с использованием стандартных компонентов delphi.

Tiopf также включает в себя ряд генераторов идентификаторов (идентификаторы, 32-битные и 64-битные целые числа и т. Д.).

Если вас интересует tiopf, я предлагаю вам начать с моего обзора . Затем направляйте любые вопросы в группы новостей.

person SeanX    schedule 10.05.2009

Попробуйте свои силы в InstantObjects с открытым исходным кодом, и вы всегда захотите использовать это для всех видов программирования баз данных в Delphi. .

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

Просто попробуйте.

Что касается генерации идентификатора, доверяйте MySQL, чтобы он сгенерировал идентификатор автоматического увеличения для вашего. Не тратьте время на его кодирование.

person Community    schedule 08.05.2009

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

Разработка на основе тестов - ваш друг. Познакомьтесь с DUnit и создайте небольшие краткие тесты для проверки любого нетривиального кода. Задокументируйте интерфейсы и все, что не видно, глядя на экран, полный кода.

person skamradt    schedule 08.05.2009

Я бы посмотрел на Model-View-Controller (который является расширением Observer / Observable Pattern). Это означает, что «представление» (то есть пользовательский интерфейс) знает только, как обновлять данные, а затем реагировать на обновляемые данные. Модель (или Observable) знает, как манипулировать данными и сообщать представлениям, что они были обновлены. Это означает, что вы можете заменить пользовательский интерфейс, не меняя поставщика данных, и наоборот.

Выполните поиск в Google, так как есть много примеров этого для Delphi (но не так много для Java / C # и т. Д.)

person mmmm    schedule 10.05.2009