クライアントからファイルを受信し、ファイルに対していくつかの操作を実行してディスクに保存するか、保存しないプログラムがあります。ジョブを切り離すために、 という名前のインターフェースを作成しましたIFileEditor
。ファイルに対して何かを行うすべてのコンポーネントは、このインターフェースを実装する必要があります。
public interface IFileEditor
{
string Name { get; set; }
byte[] Content { get; set; }
string EditedName { get; set; }
byte[] EditedConent { get; set; }
string ComponentName { get; }
XmlDocument Config { get; set; }
XmlDocument Result { get; set; }
void EditFile(byte[] content);
}
このインターフェイスの主なメソッドは EditFile で、ファイルの内容を受け取って操作を行い、最後に結果をディスクに保存します。私が書いたサンプル クラスは、このインターフェイスを実装する画像からサムネイルを作成するものです。
public class ThumbnailCreator : IFileEditor
{
public string Name { get; set; }
public byte[] Content { get; set; }
public sting EditedName { get; set; }
public byte[] EditedConent { get; set; }
public XmlDocument Config { get; set; }
public XmlDocument Result { get; set; }
public void EditFile(byte[] content)
{
//change the file content and save the thumbnail content in disk
}
}
ThumbnailCreator のようなコンポーネントがたくさんある場合があります。たとえば、zip コンテンツや、コンテンツを操作するその他のものです。
メイン プログラムでは、リフレクションによってすべてのコンポーネントをロードします。それらをロードする実装は重要ではありません。メイン プログラムの .exe の横にあるコンポーネントの ddl をコピーし、dll が IFileEditor を実装している場合は、それをリストに追加します。
主な問題は、メイン アプリケーションがファイルを受信してコンポーネントに渡すだけで、コンポーネントがジョブを実行するということです。あるコンポーネントの結果を別のコンポーネントに渡したい場合、どうすればよいですか?
コンポーネントはお互いを認識しておらず、メイン プログラムは結果の受け渡しに干渉してはならないことに注意してください。
私は検索しましたが、責任連鎖設計パターンが私の質問を解決すると思います。わからない それは正しいですか?これを実装する方法が正しければ?たとえば、1 つのコンポーネントがサムネイルを作成し、結果を渡してサムネイルを圧縮します。
この部分は、すべての開発者がコンポーネントを作成でき、メイン プログラムを拡張できるように、このように書きました。
この大きな投稿を読んでくれてありがとう。;)