-2

私は c# .net で小さなアプリを開発しています。色々な使い方をしたいと思います。Windows フォーム アプリおよびコマンド ライン アプリとして。だから私はインターフェースプロジェクトを持っていて、内部コアdllプロジェクトを持っています。そのdllのいくつかの手順で、ユーザーに連絡して、操作を続行する必要があるかどうかを尋ねます。だから...私のインターフェースプロジェクトを通じてユーザーと通信するためのより良い方法はどれでしょうか? 私のdllクラスに渡された、または何らかのサービス参照を介して渡されたある種のデリゲート関数でしょうか?

4

1 に答える 1

0

すでに使用されている用語:

  1. インターフェイスプロジェクト
  2. 内部コアdll プロジェクト

DLL がユーザーに何かを要求する必要があるのはなぜですか? DLL が実際の作業だけを行うように、設計全体を再考します。ユーザーに何をすべきかを尋ねるなど、他のすべてのことは、ユーザー インターフェイス プロジェクトでのみ実行する必要があります。

DLL が何をすべきか問い合わせるために呼び出すことができるコールバックを作成することはできますが、その呼び出しがユーザーの操作を提供するとは決して想定しないでください。つまり、情報が返される方法だけDLL が知る必要がないように設計する必要があります。

例: DLL の 1 つに、フォルダーからフォルダーにファイルをコピーする関数が含まれているとAしますB。1 つのファイルのコピーが失敗した場合、他のすべてのファイルを中止するか続行するかをユーザーに決定してもらいます。次のようなイベントを作成できます。

public class QueryContinueEventArgs : EventArgs
{
    public QueryContinueEventArgs(string failedFile, Exeption failure)
    {
        FailedFile = failedFile;
        Failure = failure;
        Continue = false;
    }

    public string FailedFile { get; private set; }
    public Exception Failure { get; private set; }
    public Continue { get; set; }
}


public event EventHandler<QueryContinueEventArgs> QueryContinueAfterCopyFailure;

protected bool OnQueryContinueAfterCopyFailure(string fileName, Exception failure)
{
    if (QueryContinueAfterCopyFailure != null)
    {
        QueryContinueEventArgs e = new QueryContinueEventArgs(fileName, failure);
        QueryContinueAfterCopyFailure(this, e);
        return e.Continue;
    }
    return false;
}

割り当てられたイベント ハンドラーは、ユーザーの操作を提供し、Continueそれに応じてフラグを設定できます。

于 2013-10-01T10:46:36.583 に答える