Это зависит от того, насколько надежны ваши требования. Если вы просто прототипируете что-то, то плотное связывание кода с вашей формой в порядке. Если, однако, вы хотите создать более гибкое, надежное и расширяемое приложение, то ваша структура данных в классах будет заключаться в том, что ваша структура данных в классах является инкапсулирующей вашу функциональность.
Классы позволяют моделировать вещи в реальном мире и облегчают их реализацию в логически разделенном 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
Это отлично и дает мне много, чтобы думать. Хотел бы я знать это, прежде чем тратить месяцы на программу (на самом деле для НПЗ, а не бейсбольных карт). Я могу придумать несколько часов, чтобы преобразовать его в этот более надежный стиль. –
Я продолжаю осознавать, что что-то не так, как я прогрессирую. Например, мне нужно создавать скрытые поля в своих формах для хранения временных данных. Я думаю, что мне нужно немедленно создать экземпляр класса, чтобы я мог сделать это: проверка места, когда поле будет изменено, а не после того, как все будет заполнено. Тогда я могу поместить проверку в класс, а не в код формы. Имеют смысл? –
Да, это имеет смысл. Таким образом, вы можете создавать свойства, основанные на других свойствах и не поддерживаемые частной переменной (вместо использования скрытых полей), которые затем можно использовать для проверки. Например, у вас может быть дата начала и свойство даты окончания. Но вы также можете иметь свойство NumberOfDays, которое было enddate - startdate. Тогда, если NumberOfDays <0, вы вызываете ошибку проверки, потому что дата начала не может быть после вашей даты окончания. Извините, мой ответ занял так много времени, я был в отпуске :) – majjam