У меня есть класс в другом проекте 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 в моем конструкторе с одним параметром.