Является ли хорошей практикой использование статических классов для обеспечения доступа к элементам пользовательского интерфейса из всех классов в .NET?

#c# #.net #wpf #user-interface #static-classes

#c# #.net #wpf #пользовательский интерфейс #статические классы

Вопрос:

Пожалуйста, дайте мне знать, что из следующего является хорошей практикой программирования:

1. Используя статический класс, а затем используя ссылку на него из конструктора MainWindow класса, как показано:

     public partial class Mainwindow : Window
    {
    public MainWindow()
    {
        InitializeComponent();
        UI.window = this;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {   
        Shutdownads attempt1 = new Shutdownads();
    }
    }

    static class UI
    {
        public static MainWindow window; 
    }

    /*and then refering to the wpf elements from other classes as follows
       UI.window.textbox.Text="blahblah"
       UI.window.button ... and so on
    */
  

или

2. Лучше ли включать все классы в моей программе в класс MainWindow?

или

3. Есть ли лучший вариант (который также реализует лучший ООП, а также я могу получить доступ к пользовательскому интерфейсу через другие классы)?

Комментарии:

1. Зачем вам нужно сделать элементы пользовательского интерфейса доступными? Если вы делаете что-то нетривиальное с WPF, тогда вам действительно следует использовать MVVM, который абстрагирует детали элементов пользовательского интерфейса.

Ответ №1:

Обычно плохой практикой является управление элементами пользовательского интерфейса из нескольких классов.

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

Другие классы могут принимать этот интерфейс в качестве параметра конструктора или использовать его из статического класса.

Комментарии:

1. Эй, спасибо… Я попробую этот метод. Интерфейс будет просто идеальным.

Ответ №2:

Я не знаю точно winforms. Но вы должны следовать модели mvc.

Обычно у вас есть свой mainclass (в вашем случае mainwindow), который является контроллером. Таким образом, все представления (подэлементы) управляются из этого класса. Подэлементы могут содержать ссылку на mainwindow. Основной класс должен быть очень гладким. Модель, конечно, тоже должна быть разделена. Статические классы — плохая практика. Не делайте этого.

Ответ №3:

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

возможность реагировать на «далекие» события заключается в реализации шаблона observer. таким образом, вы обрабатываете изменения визуализации (в данном случае MainWindow) действительно на уровне представления