В настоящее время я пытаюсь изменить существующий проект Windows Forms, чтобы лучше соответствовать принципам SOLID. В настоящее время существует основной класс, который инициализирует форму, и вся логика затем обрабатывается в логическом классе.Сопряжение класса C# с формами Windows
Это создает высокое сцепление и не является неустойчивым, потому что все локусы меняют предметы на основной форме. Например, у меня есть кнопка для обновления сетки, это вызывает логический класс для создания данных, а затем это обновляет сетку. Ниже приведен краткий пример того, как он выглядит в настоящее время.
public partial class XpressReports : Form
{
private void refresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
try
{
Globals.DataLogic.RefreshData();
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message);
}
}
}
public class DataLogic
{
public void RefreshData()
{
dataset selectedTableList;
selectedTableList = GetNonRefreshFlagColumnIdList();
dataGridView.Columns.Clear();
dataGridControl.DataSource = null;
dataGridControl.DataSource = dataViewData.Tables[0];
}
}
Я не уверен, какой идеальный подход для чего-то подобного. Я мог бы создать новый метод, чтобы обновить источник данных в основном классе формы, но тогда все еще будет много назад и вперед между ними. Каков наилучший способ разделить эту штуку?
Вы имеете право идею. Это не так сложно, как вы думаете. Идея, лежащая в основе используемой вами методологии, заключается в том, что при необходимости вы можете заменить пользовательский интерфейс и по-прежнему иметь одну и ту же логику в фоновом режиме. Единственное, что я рекомендовал бы сделать, чтобы немного более слабо связанный был бы, как вы сказали, пусть какой-либо из ваших элементов управления обновит источник на стороне пользовательского интерфейса. Например, RefreshData может вернуть набор данных, а не устанавливать его в этом методе. И ваш метод формы может установить источник данных. Таким образом, ваша логика всегда возвращает набор данных и не заботится об пользовательском интерфейсе – oppassum