В моем проекте Windows Forms у меня есть родительская форма, которая создает другие пользовательские элементы управления и затем помещает их в TabControl. Моя проблема в том, что код в родительской форме становится очень большим и сложным в управлении.
В родительской форме у меня есть методы, которые выглядят так:
public SubControl1 CreateSubControl1(Guid ID, Info userInfo, bool populate)
public SubControl1 CreateSubControl1(Guid ID, Info userInfo, bool populate, StateType1 state)
public SubControl2 CreateSubControl2(Guid ID, Info userInfo, bool populate, String dataFile, String dataFile2, )
public SubControl2 CreateSubControl2(Guid ID, Info userInfo, bool populate, String dataFile, String dataFile2, StateType2 state)
private SubControl3 CreateSubControl3(Guid ID, Info userInfo, bool populate, String dateFile)
private SubControl3 CreateSubControl3(Guid ID, Info userInfo, bool populate, String dateFile, StateType3 state)
private SubControl4 CreateSubControl4(Guid ID, Info userInfo, bool populate, WorkingFolder wf)
private SubControl4 CreateSubControl4(Guid ID, Info userInfo, bool populate, WorkingFolder wf, StateType4 state)
В данный момент, в зависимости от того, какой SubControl (1-4) я хочу создать, я вызываю соответствующий метод CreateSubControlX
. Пока это работает нормально, но я уверен, что есть лучший способ сделать это, возможно, путем сбора всего кода для создания своего рода фабричного класса.
Однако, поскольку каждый из моих производных типов имеет немного разные входные параметры, мне интересно, как это сделать? Должен ли я создать «простую» фабрику, которая имеет общий метод Create
, который принимает все возможные типы параметров и тип (чтобы отличить, какой SubControl 1 - 4 создать). Затем я мог бы использовать ноль для любых параметров, которые я не хочу устанавливать. Это кажется мне плохой идеей.
например. ControlFactory.Create(ID, userInfo, false, null, null, null, SubControlType1)
BaseControl
- это базовый класс для всех типов элементов управления, например, SubControl1
до SubControl4
.
Может кто-нибудь предложить какую-нибудь помощь?