Как структурировать VB.NET приложения Windows Forms

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

14
задан Peter Mortensen 23 June 2017 в 22:18
поделиться

3 ответа

Я имел большой успех с этим Пассивный Экранный шаблон.

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

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

прием к решению этого делает узел контроллера что блок формы (или EXE) ссылки. Каждая форма имеет соответствующий класс в блоке. Нажатие кнопки будет звонить ThisForm.ThisButton(<args>), который тогда запустит объекты ниже в Вашу платформу. Каждая форма реализует интерфейс так, чтобы, если для класса контроллера нужна дополнительная информация от формы, это имело интерфейс для получения его.

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

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

мне нравится структурировать мои приложения следующим образом.

  • Утилита - Это - блок, который имеет материал, который я использую все время - Математические функции, функция файла, и т.д.

  • Объекты - Это имеет конкретные объекты, которые я использую для этого приложения.

  • UIFramework - Это определяет всю форму и интерфейсы контроллера.

  • Команды - Это имеет все Объекты команды, которые управляют моими объектами приложения.

  • UI - Объекты, которые реализуют интерфейсы контроллера

  • EXE - Формы, которые реализуют интерфейс формы и называют объекты контроллера.

4
ответ дан 1 December 2019 в 15:13
поделиться

Можно хотеть проверить Rocky Lhotka, популярного Платформа CSLA . Это обеспечивает очень структурированный способ реализовать бизнес-объекты, таким образом, можно не допустить код неUI в формы. Вне просто разделения Вашей бизнес-логики, хотя, это обеспечивает созданный в отмене n-уровня, проверке, безопасности, поддержке привязки данных, и т.д.

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

3
ответ дан 1 December 2019 в 15:13
поделиться

Что-то, что может помочь, - это использование элементов управления пользователя . С помощью пользовательских элементов управления вы можете повторно использовать один и тот же интерфейс в разных формах. Кроме того, у вас может быть много пользовательских элементов управления в одной форме, поэтому, если у вас есть форма с помощью TabControl, который имеет 5 вкладок, содержимое каждой вкладки может быть элемент управления пользователями, поэтому вместо того, чтобы сотни элементов управления все смешались в одной форме Каждый элемент управления пользователя имеет свой собственный элемент управления и логика проверки, и вы получите всего шесть элементов управления в виде: TabControl и 5 пользовательских элементов управления.

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

3
ответ дан 1 December 2019 в 15:13
поделиться
Другие вопросы по тегам:

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