2013-08-06 2 views
0

Я новичок в использовании классов и хотел бы изучить умные способы интеграции их с формами. В частности, когда вы вводите данные в форму, должна ли эта форма быть тесно связана с классом и каким образом?VBA Excel Лучшие практики для использования форм и классов вместе?

Давайте рассмотрим простой пример. Джон - коллекционер всех видов карт: бейсбольные карточки, карты Покемона и т. Д. Он хранит свою базу данных списка карт, хранящуюся в листах Excel, и управляет ими с помощью форм. Существуют формы для ввода новых карт и изменения их статуса в его коллекции, а также существуют формы и функции для анализа его данных.

У него может быть clsBaseball, clsPokemon, clsAlbum и clsSalesRecord. Он также имеет формы для ввода и изменения данных и других типов форм анализа, которые сравнивают карты, вычисляют статистику для разных команд и периодов времени и т. Д.

Когда Джон нажимает кнопку «Новая бейсбольная карта», появляется его frmBaseball.

  1. Он вводит данные бейсбольной карточки
  2. Он нажимает Update
  3. Форма ПРОВЕРЯЕМЫЕ
  4. Данные сохраняются на листе

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

ответ

3

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

Классы позволяют моделировать вещи в реальном мире и облегчают их реализацию в логически разделенном tiered architecture. В вашем случае ваша форма предоставляет уровень представления, ваши классы предоставляют уровень приложения, а ваши листы excel предоставляют уровень данных (обычно базу данных) - это 3 уровня.

Итак, в вашем примере я бы моделировал ваши данные в классах, как вы это делали, но если бы мне потребовалась функциональность, требующая всех объектов clsBaseball, у меня было бы управление классами для каждого объекта. Эти классы управления содержат коллекцию ваших объектов clsBaseball и позволяют реализовать поведение, требующее коллекции объектов. Например, вы бы реализовали свой метод обновления в clsBaseball, но вы бы использовали CalculateStats в классе управления clsBaseballs, вы также могли бы вызвать методы обновления для всех ваших объектов clsBaseball, итерации по коллекции clsBaseball в (управляющем классе) clsBaseballs.

В ответ на вопросы:

В любой момент в указанном выше способе используется clsBaseball?

1) Он вводит данные бейсбольной карточки: Вы, возможно, создается экземпляр clsBaseball, но, возможно, еще не

2) Он щелкает обновление: Вы инстанцируете новый экземпляр clsBaseball (или использование существующий), пройти через введенные пользователем значения и вызвать метод обновления clsBaseball. Таким образом вы инкапсулируете поведение clsBaseball.

3) Форма подтверждена: Это произойдет до того, как clsBaseball обновит хранилище данных. Таким образом, у вас, вероятно, будет метод проверки в clsBaseball, который вызывается до обновления любых данных. Любые ошибки могут быть переданы обратно на уровень представления (ваша форма). Или вы можете просто подтвердить это в форме (хотя наличие какой-либо бизнес-логики в слое презентации недооценивается, потому что вам может понадобиться отключить слой презентации для чего-то еще, см. Раздел MVC/MVP patterns).

4) Данные сохраняются на рабочем листе: Это делается методом clsBaseball по методу обновления.

Что касается вашей фантастической сортировки или статистических процедур, вы можете получить эти данные из своих управляющих классов, которые, поскольку они содержат коллекции ваших объектов, отлично настроены для анализа всех ваших экземпляров clsBaseball. Все эти функции прекрасно инкапсулированы, повторений нет (DRY), и каждый, кто приходит в код, сможет выяснить, что происходит.

Я ответил на вопрос некоторое время назад снова, как структура данных в MS Access, ответ включает в себя примеры класса и управляющего класса: MS ACCESS 2003 triggers (Query Event), and Excel import

+0

Это отлично и дает мне много, чтобы думать. Хотел бы я знать это, прежде чем тратить месяцы на программу (на самом деле для НПЗ, а не бейсбольных карт). Я могу придумать несколько часов, чтобы преобразовать его в этот более надежный стиль. –

+0

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

+0

Да, это имеет смысл. Таким образом, вы можете создавать свойства, основанные на других свойствах и не поддерживаемые частной переменной (вместо использования скрытых полей), которые затем можно использовать для проверки. Например, у вас может быть дата начала и свойство даты окончания. Но вы также можете иметь свойство NumberOfDays, которое было enddate - startdate. Тогда, если NumberOfDays <0, вы вызываете ошибку проверки, потому что дата начала не может быть после вашей даты окончания. Извините, мой ответ занял так много времени, я был в отпуске :) – majjam

Смежные вопросы