Delphi DataModule Использование - один или несколько? - PullRequest
7 голосов
/ 23 ноября 2010

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

Ответы [ 4 ]

9 голосов
/ 23 ноября 2010

Я должен согласиться с Ldsandon, IMHO, лучше иметь более одного модуля данных в вашем проекте. Если вы посмотрите на это как на модель - представление - контроллер, ваша БД - это модель, ваши формы будут представлениями, а модули данных - контроллерами.

Лично у меня всегда есть как минимум 2 модуля данных в моем проекте. Один модуль данных используется для обмена действиями, списками изображений, DBConnection и т. Д. По всему проекту. В большинстве случаев это мой основной модуль данных.

С этого момента я создаю новый модуль данных для каждой «сущности» в моем приложении. Например, если мое приложение должно обрабатывать или отображать заказы, курсоры и продукты, то у меня будет модуль данных для каждого из них.

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

С уважением,

Stefaan

6 голосов
/ 23 ноября 2010

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

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

  if FDataModule = nil then
  begin
    FDataModule := TMyDataModule.Create(Self);
    FDataModule.Name := '';  // That will avoid pointing to the same datamodule
  end;
2 голосов
/ 28 января 2011

Модуль данных только для ваших табличных объектов, если у вас всего несколько таблиц в БД, был бы хорошим первым.

А модуль данных только для ваших действий - это другой.

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

Если у вас есть 200 табличных объектов, возможно, более одного модуля данных только для таблиц БД,Представьте себе приложение, которое имеет 20 таблиц для выставления счетов и еще 20 таблиц для работы с персоналом.Я думаю, что InvoicingDataModule и HRDataModule было бы неплохо разделить, если таблицы внутри них и код, работающий против них, не должны ничего знать друг о друге, или даже когда один модуль имеет зависимость «использует»в одном направлении, но эти отношения не круговые.Даже в этом случае может быть полезна более тонкая модульность модуля данных.

2 голосов
/ 23 ноября 2010

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

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

Я использую один такой DataMovule на каждую группу логически связанных таблиц.

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

Во время разработки:

  • Мое приложение легче разрабатывать. Формы дают вам возможность просматривать компоненты данных, облегчая разработку этих компонентов.
  • Мое приложение легче отлаживать, так как вы можете сразу добавить некоторые компоненты для просмотра, чтобы вы могли увидеть данные. Я обычно создаю стойку с вкладками, по одной странице на таблицу и одну сетку данных на каждой странице для просмотра данных в таблице.
  • Моё приложение проще тестировать, так как вы можете со временем манипулировать данными, например, экспериментировать с экстремальными значениями для стресс-тестирования.

После разработки:

  • Я превращаю форму невидимой. Практически делая его DataModule, я наслаждаюсь теми же функциями контейнера, что и модуль данных.

  • Но с бонусом. Форма все еще там, так что я могу в конечном итоге сделать ее видимой для определения проблемы. Для этого я использую поле About.

И нет, я не испытал заметных потерь в размере или производительности приложения.

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

...