私は自分より先に進んだと思う。コードはをに実行するので、設定をコードに置き換えることはできませんが、設定ではコードに何かを何かやる方法を伝えるだけです(設定自体にコードが含まれていない限り、逆説があります)。コードに設定可能性を適用するには、まず汎用/汎用(switch
ステートメントはではなく、現在はではないことを示す)にする必要があります。これを行うための私のアプローチは私の元の答え(下記)に記述されています。それ自体は設定可能ではありませんが、そうすることができます(私はそれをかなり単純に行っています)。コードは元の質問に基づいていますので、正しく読めるように目を再調整してください。
私が過去にを選んだしましオプションはシングルトンに収納されたか、IoCコンテナの形で自分のコードサンプルを所有している関数に渡されるかどうか(工場を使用することであった。
。
public class DbOperationAttribute : Attribute
{
public string Operation { get; set; }
}
そしてAPI NEを提供するために、共通のインターフェイス:私のアプローチの非常に高いレベルの実装では、あなたのタイプが便利ですときのようなものをを示すプロパティが含まれているカスタム属性を定義することは基本的ですあなたのコードが実行されるように編集します。何かのように:
public interface IDoSomethingSpecial
{
bool Execute(SomeExecutionContext context);
}
そして、あなたは属性で特定のクラスを飾ると、彼らはアクションごとに適切であることを示すために、インターフェイスを実装:
[DbOperation(Operation = "Read")]
public class DBReadOperation : IDoSomethingUseful
{
// Our implementation of the `IDoSomethingUseful` interface
public bool Execute(SomeExecutionContext context)
{
// Do something useful in here
}
}
あなたがする必要がありますあなたのプログラムの中でいくつかの点でどのタイプがどのアクションに適しているかを発見できる。私はこれを反映させていますが、これは設定と同じように簡単に行うことができます(属性のポイントを無効にします)。いくつかのIoCコンテナは類似の検出可能性属性を提供しますが、他の誰かを使用すると、あなたは自分たちのやり方(通常)を行い続けるでしょう。私はちょうどあなたの設定を保存するためにApp.Config
/Web.Config
を使用しての方に傾くだろう、この設計に基づいて
IDoSomethingUseful someAction = myCollectionOfUsefulThings(requesttype);
someAction.Execute(someInstanceOfOurContextType);
:あなたはどのアクションに対して適切であるタイプを発見したら
、あなたのようなものを使用することができます。とにかくそれは一般にそこにあるでしょう。同様にあなたの目的のためにそれを使用するかもしれません。
質問がちょっと違っていて、ちょうどあなたが探しているものを伝えるのが少し難しい –
@DanielPowellそれは今のところ質問形式に合っていますか? – Deeptechtons
3つの列を持つSqliteテーブルがジョブを実行しますか? (RequestType、CrudType、StoredProcedureName) –