現在、SOLIDの原則をよりよく遵守するために、既存のWindowsフォームプロジェクトを変更しようとしています。現在、フォームを初期化するメインクラスがあり、すべてのロジックはロジッククラスで処理されます。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];
}
}
このような何かのための理想的なアプローチはわかりません。私はメインフォームクラスのデータソースを更新する新しいメソッドを作成することができますが、2つの間にはまだ多くの前後があります。この種のものを分ける最善の方法は何ですか?
あなたは正しい考えを持っています。これはあなたが思っているように結合されていません。使用している方法論の背後にあるアイデアは、必要に応じて、UIを交換して、バックグラウンドで同じロジックをすべて使用できるということです。私が少し疎結合させることをお勧めする唯一のことは、あなたのコントロールのいずれかがUI側でソースを更新してもらえるかのようになります。たとえば、このメソッドで設定する代わりに、RefreshDataがデータセットを返すことがあります。そして、あなたのフォームメソッドはそれからデータソースを設定することができます。そうすれば、あなたのロジックは常にデータセットを返すので、UIについては気にしません – oppassum