Являются ли типы типов признаком плохо разработанного кода? - PullRequest
2 голосов
/ 16 декабря 2010

Я буду первым, кто скажет кому-то, что мой дизайн кода может использовать улучшения. Я не могу не чувствовать, что когда в моем коде есть типы типов, это признак того, что что-то должно быть переработано, чтобы удалить типы типов. Этот вопрос состоит из двух частей, первая из которых просто опубликована: являются ли типы типов признаком плохо разработанного кода?

Второй вопрос основан на первом: если типы являются такими же злыми, как я чувствую, то как можно избежать описанной ниже ситуации?

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», основанные на том, в каком состоянии Программа в (вход против выхода).

Ответы [ 2 ]

6 голосов
/ 16 декабря 2010

Вы можете сделать свой код намного чище (и избегать типов), используя интерфейс или общий базовый класс для двух элементов управления (inputPanel и outputPanel) , Просто сохраните BodyControl в качестве базового класса или интерфейса (вместо Control). Предполагая, что интерфейс или базовый класс реализуют метод PopulateFromData, вам вообще не понадобится приведение.

Также убедитесь, что вы знаете о предложении в C #. Это может пригодиться при работе с подобными сценариями.

3 голосов
/ 16 декабря 2010

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

тогда как можно избежать ситуации ниже?

Вы можете сохранить переменные InputPanel и OutputPanel и использовать флаг, чтобы указать, в каком «режиме» находится ваш класс (режим ввода или режим вывода).

Кроме того, я не понимаю смысла:

var outputPanel = new OutputPanel();
bodyControl = outputPanel();

Я думаю, он должен читать bodyControl = outputPanel; так же bodyControl = inputPanel;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...