Я буду первым, кто скажет кому-то, что мой дизайн кода может использовать улучшения. Я не могу не чувствовать, что когда в моем коде есть типы типов, это признак того, что что-то должно быть переработано, чтобы удалить типы типов. Этот вопрос состоит из двух частей, первая из которых просто опубликована: являются ли типы типов признаком плохо разработанного кода?
Второй вопрос основан на первом: если типы являются такими же злыми, как я чувствую, то как можно избежать описанной ниже ситуации?
class InputPanel : Control
{
public event EventHandler InputEvent;
}
class OutputPanel : Control
{
}
class MainWindow : Form
{
public MainWindow()
{
var loadButton = new Button();
loadButton.Click += new EventHandler(HandleButtonClick);
var inputPanel = new InputPanel();
inputPanel.InputEvent += new EventHandler(HandleInputEvent);
bodyControl = inputPanel;
}
private void HandleButtonClick(object sender, EventArgs args)
{
OpenFileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog(this) == DialogResult.OK)
{
var data = LoadDataFromFile(dialog.FileName);
var inputPanel = bodyControl as InputPanel; // Ugly typecast...
if (inputPanel != null)
{
inputPanel.PopulateFromData(data);
}
}
}
private void HandleInputEvent(object sender, EventArgs args)
{
var outputPanel = new OutputPanel();
bodyControl = outputPanel;
}
Control BodyControl;
}
Причина вышеупомянутого кода заключается в том, что форма MainWindow содержит MenuStrip (в данном примере упрощенный для кнопки) и один элемент управления (BodyControl). Поскольку отображаемый элемент управления необходимо изменить с панели ввода на панель вывода, с помощью нажатия кнопки можно просто переназначить поле BodyControl (настроить родительские элементы и т. П.). Это означает, что одновременно загружается только одна панель, логика компоновки упрощается, потому что в MainWindow есть только одна панель (две, если вы включаете MenuStrip), а не условно размеченные элементы управления «body», основанные на том, в каком состоянии Программа в (вход против выхода).