Каков наилучший способ реализации чистых пользовательских интерфейсов в WinForms при сохранении достойной развязанной архитектуры?


4

Я имею тенденцию внедрять функциональность пользовательского интерфейса, используя довольно самодокументированные методы void doSomething(), то есть если пользователь нажимает эту кнопку, тогда выполните это действие, затем включите этот список, отключите эту кнопку и т. Д. Это лучший подход? Есть ли лучший шаблон для общего управления пользовательским интерфейсом, то есть как управлять, когда элементы управления включены/отключены/и т. Д. и т. д. в зависимости от ввода пользователя?

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

Так могут ли люди дать мне хороший совет по созданию качественного, тестируемого, развязанного дизайна WinForms, не попадая в эти ловушки?

0

Я бы только поставить логику пользовательского интерфейса в классе формы и поставить любую логику приложения в своем классе:

class Form1 : Form 
{ 
    void Button1_Click 
    { 
     Program.DoCommand1(); 
    } 
} 


static class Program 
{ 
    internal static void DoCommand1() {/* ... */} 
} 

12

Вы можете попробовать MVP, если вы хотите поместить логику пользовательского интерфейса в отдельном классе. .

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


3

Использование шаблона MVP довольно хорошо с winforms.

посмотреть на http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf

  0

Также: http://codebetter.com/blogs/jeremy.miller/articles/129546.aspx 23 сен. 082008-09-23 21:53:29


0

Одна вещь, я донг в последнее время эффективно использует частичную функцию класса для .NET для некоторых из этих крупных форм типа. Если у меня есть элемент управления вкладкой с 5 различными вкладками. Я создам частичные классы и назову файлы CardImportMethods.cs, ManageLookupTables.cs и т. Д., Оставив все это частью класса CentralizedForm.

Даже с логикой пользовательского интерфейса, когда это разбиение помогло, когда дело дошло до управления этими вещами.