Разрешено ли переносить части интерфейса между двумя программами в конструктор? - PullRequest
0 голосов
/ 05 апреля 2019

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

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

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

Какой будет лучший, правильный (и более приемлемый) подход? Есть ли какой-то принцип, объясняющий это?

Вот небольшой пример кода:

public interface IToImplement {
     int GetIndex();
     int GetOldIndex();
     string GetMainObjectAsList();
     string GetDocPath();
     string GetDocName();
}

Вот мой класс, где я хочу показать другое wpf-приложение:

public class MasterClass : IToImplement {
     ...
     ...

     private void StartOtherApp() {
          MainWindow window = null;
          if (something)
               window = new MainWindow(this);
          else if (anything)
               window = new MainWindow(this, path);
          else
               window = new MainWindow(this, path, name);

          window.ShowDialog();
     }
}

Эти заявления не подлежат изменению.

Последний мой класс MainWindow в моем другом проекте:

public partial class MainWindow : Window {
     public MainWindow() {
          InitializeComponent();
     }

     public MainWindow(IToImplement i) {
     }

     public MainWindow(IToImplement i, string path) {
     }

     public MainWindow(IToImplement i, string path, string name) {
     }
}

Параметры path и name берутся из функций интерфейса GetDocPath () и GetDocName (). Поэтому эти две функции должны быть удалены из моего реализованного интерфейса и должны быть перенесены как параметры в конструктор, как в примере кода выше. В противном случае мне пришлось бы реализовать три оператора if в моем конструкторе с одним параметром.

...