MVCモデルのビューレイヤーとモデル/アダプターレイヤー間を行き来するための正しいアプローチを見つけようとしています。以下は私の問題の擬似コードであり、私がそれをしたいものです。説明については、MyAdapter.ImportStuffメソッドのコメントを参照してください。コントローラ/アダプタが実際に静的なクラスですので、モデル/アダプタレイヤーの長いプロセスでビューレイヤーに情報を渡す方法
public class MyView : System.Windows.Forms.UserControl
{
private MyContoller Ctrl = new MyContoller();
public MyView()
{
}
private void OnButtonClick()
{
Ctrl.DoSqlStuffNow();
TellUserImportFinished();
}
public void TellUserThingsHaveBeenDeleted()
{
this.label1.Text = "Stuff deleted...";
}
public void TellUserHowManyRowsHaveBeenInserted(int rowCount)
{
this.label2.Text = $"Number of rows inserted: {rowCount}...";
}
public void TellUserComplexQueriesAreDone()
{
this.label3.Text = "Complex queries are done...";
}
public void TellUserImportFinished()
{
System.Windows.Forms.MessageBox.Show("Success!");
}
}
internal class MyContoller
{
MyAdapter Adpt = new MyAdapter();
internal void DoSqlStuffNow()
{
object someParameter = new object();
Adpt.ImportStuff(someParameter);
}
}
internal class MyAdapter
{
internal void ImportStuff(object someParameter)
{
SqlConnection sqlConnection = new SqlConnection("connection");
// All of this has to happen in one connection/transaction.
// It should not be broken into multiple methods
DeleteFromTable1();
DeleteFromTable2();
// Now I want to tell the user delete is complete!
MakeTempTable();
InsertIntoTempTable(someParameter);
int rowCount = ImportIntoTable1();
// Now I want to tell the user how many rows were just inserted!
DoComplexQuery();
DoAnotherComplexQuery();
// Now I want to tell the user complex queries are done!
ImportIntoTable2();
DropTempTable();
// Presumably, I can say "success" when this function returns, which is fine
}
}
私の特定のケースはさらに悪くなるので、イベントのは、対処するのも楽しいではありませんが、私はこの単純な場合には、それを処理するために最善の方法さえわかりません。
アドバイスをいただければ幸いです!