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

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

import re, urllib.request
from bs4 import BeautifulSoup

url = "https://www.imdb.com/search/title?groups=top_250&sort=user_rating"
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'html.parser')
i = 0
for txt in soup.findAll(attrs={"class" :"lister-item-header"}):
    i += 1
    print(str(i) + " ." + re.match("""^.*>(.*)</a>.*$""", re.sub('"', '', re.sub('\n', '', str(txt)))).group(1))

Мой вывод: (это французский ...)

  1. Les évadés

  2. Le parrain

  3. Темный рыцарь: Le chevalier noir

  4. Le parrain, 2ème partie

  5. Le seigneur des anneaux: Le retour du roi

И этот список можно продолжить ...

6
задан 8 May 2009 в 14:10
поделиться

7 ответов

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

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

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

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

2
ответ дан 8 December 2019 в 04:10
поделиться

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

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

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

11
ответ дан 8 December 2019 в 04:10
поделиться

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

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

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

4
ответ дан 8 December 2019 в 04:10
поделиться

Take a look at tiOPF

3
ответ дан 8 December 2019 в 04:10
поделиться

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

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

2
ответ дан 8 December 2019 в 04:10
поделиться

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

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

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

3
ответ дан 8 December 2019 в 04:10
поделиться

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

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

1
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

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