Я помню изучение VB4 и перетаскивание кнопки на форму, двойной щелчок по этой кнопке и ввод кода в тот обработчик событий, которым я только что получил магическое благословение. Придя из QBASIC, я был в восторге от «V» в «VB», визуальный дизайнер был буквально лучшей вещью со времен нарезанного хлеба.
Конечно, вы можете делать все это программно, но магия «V» была настолько привлекательной, что вы просто не могли удержать эту кнопку. Мы были поощрены пойти по этому пути.
Но затем, несколько лет назад, я начал изучать C # и .net framework и был очарован тем, как все, что я думал, что я знал, только что вышло из окна. В VB6 происходит много магии, которая полностью раскрыта в .net: например, конструкторы и InitializeComponents
метод. В последнем вы найдете все экземпляры элементов управления, которые вы перетаскивали из панели инструментов, все события, которые вы зарегистрировали, и свойства, которые вы установили в конструкторе.
И это нормально ... Я думаю. Просто я чувствую, что не «владею» тем, что происходит, этот код, который я могу изменить только через дизайнера, раздражает меня до чертиков. Каждый раз, когда вы копируете кнопку с надписью «ОК» из одной формы в другую (иногда вместе с ее братом «Отмена»), вы на самом деле дублируете код, и это не грех ? СУХОЙ, не повторяйся, говорит папа .
Не говоря уже о религиях и школах мысли, со всей объективностью, не должны ли мы вместо этого извлекать формы из базовых форм, и чтобы кнопка «ОК» (и все ее друзья) жили в базовой форме? Нечто подобное, FormBase
из которого происходит DialogFormBase
; все классы созданы в кратчайшие сроки ... набрав код. Кнопки создаются в зависимости от того, как создается экземпляр класса (т. Е. Аргумент перечисления конструктора определяет, какие кнопки должны быть созданы), элементы управления размещаются внутри расположения разделенных панелей и панелей разметки потока, внедряемых в форму какContent
это вписывается в основную панель контента. Разве это не то, что ASP.net делает с мастер-страницами и заполнителями контента? Я бы получил форму, когда мне нужна новая «мастер-страница», но эта «мастер-страница» по-прежнему наследуется от базового класса формы, поэтому визуальные эффекты едины во всем приложении.
Для меня это намного больше повторного использования кода, чем что-либо еще, что я когда-либо делал с конструктором в WinForms, и это не было даже сложно, и код не загроможден 200-строчным методом, который я не могу контролировать, я могу оставляйте комментарии там, где мне нравится, они не будут перезаписаны дизайнером. Я предполагаю, что это просто вопрос шаблонов и архитектуры, и именно это привело меня к этой ссылке: лучший дизайн для форм Windows, которые будут иметь общую функциональность , где я понял, что нахожусь на месте, кроме ответа, который предлагает именно то, что я делает, но это советует против наследования форм из соображений дизайнера. Эту часть я не понимаю .из- за соображений структуры кода, особенно в отношении наследования форм и элементов управления, которые я не вижу причин избегать, кроме того, что это нарушает конструктор .
Мы не можем быть просто ленивыми, так какую часть мне не хватает?