Необходимо подтвердить мои мысли о модулях против классов в VB.net - PullRequest
1 голос
/ 12 августа 2010

Я работаю над проектом с подрядчиком, которого мы наняли для программирования на VB.Net.Раньше я программировал для этого проекта, но в последнее время я стал главным менеджером проектов, поэтому я могу работать над другими своими проблемами.Его метод программирования сильно отличается от того, чему меня учили в школе.Единственный раз, когда он использует классы, это в основном своего рода набор данных (не фактический набор данных, как я научился использовать в школе).Например, есть класс cEmployee, в котором он создает класс для Employee и определяет все поля, которые есть у сотрудника.

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

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

Ответы [ 4 ]

1 голос
/ 13 августа 2010

Трудно ответить, не видя код. Из информации в вашем вопросе показалось, что ваш подрядчик писал процедурный структурированный код, который старомоден, но не обязательно огромная проблема, хотя многим программистам, которые привыкли к ОО, не понравится смотреть на код.

Из вашего последнего комментария к ответу Дэна похоже, что он пишет модуль для каждой функциональной области с подпрограммами, которые могут воздействовать на любой объект. Подпрограммы принимают аргументы Object или Variant, определяют тип объекта, переданного с помощью операторов case / if, затем переходят к соответствующему коду для этого объекта. Это правильно? Это довольно эксцентрично и трудно поддерживать. Обычно лучшим способом является объявление интерфейсов для функциональных областей, и классы должны реализовывать интерфейсы.

Я видел такой код от программистов-самоучек. Чтобы быть справедливым по отношению к ним, они яркие люди, которые спотыкались о том, чтобы изобретать ОО программирование с нуля! Это может быть медленный процесс, и лучше сначала узнать о выводах других людей! Я мог бы порекомендовать курс по ОО-программированию или, если он читает книгу, типа Head First Design Patterns или даже Code Complete 2 , в которой есть несколько хороших глав по дизайну. Если вы сможете подсадить его на Code Complete, было бы неплохо .

1 голос
/ 12 августа 2010

Из вашего описания ситуации видно, что ваш программист имеет фоны VB6 и не полностью мигрировал в VB.NET;он не использует ООП, если может избежать этого.

Чтобы ответить на ваши вопросы, его стиль кода стал бы адом для чистого программиста на VB.NET.Тем не менее, это не вызовет больших накладных расходов.

1 голос
/ 12 августа 2010

Модуль VB в основном определяет «глобальные» функции - если бы это был C #, это был бы статический класс со статическими функциями. Однако это не будет иметь никакого значения для требований к ресурсам вашего приложения: все методы определяются один раз, независимо от того, откуда они вызываются, и присутствие в модуле или классе не меняет этого. Если у вас есть 20 форм, которые все используют код комбинированного списка, код комбинированного списка все еще существует только один раз - он не дублируется 20 раз ни в приложении, ни в памяти при запуске.

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

0 голосов
/ 12 августа 2010

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

Хорошо, как вы сказали, что загрузка всех функций одновременно увеличит накладные расходы, так что вот как это происходитбуду работать;поскольку выполнение имеет дело с функциями только тогда, когда они необходимы, а не когда начинается выполнение, поэтому независимо от того, включены ли в ваш код сотни функций, компилятор будет выполнять их только при вызове (до тех пор, пока компилятор не знает, что вынаписал в нем) наряду с размещением переменных внутри функций.Но это не тот случай, когда переменные являются общими для всех функций, например, когда они являются общими для всех функций, они являются глобальными для них, и, следовательно, они будут находиться в памяти с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...