この質問は、再構築が必要な既存システムの非効率的なアーキテクチャに関するものです。このような厄介なシステムを管理した経験のある仲間の開発者からの検証を求めます。以下でできる限り抽象化しようとしました。
このアプリケーションは非常に複雑なニーズに対応し、非常にうまく機能します。問題は、内部配管によってコード管理とスケーラビリティが悪夢になることです。コンテキストについて共有できる情報には、コードをデータ商品として扱う必要があるという事実が含まれます。つまり、システムは、実装されたクラスが継続的に追加されなければ機能しません。
アプリケーションがエンドユーザーに提供するのはデータではなく[Action]
、コード実行コンテキストを必要とするものです。したがって、アプリケーションは、ユーザーが期待するものを提供するために、ターゲット システムで何らかのコードを実行する必要があります。現在、これらの期待値はコンパイル時には不明であり、ほぼ毎日新しいものを追加する必要があります。つまり、開発者は[Actions]
定期的にシステムに追加を続けます。
既存のシステムは、これらの[Action]
クラスに静的にリンクしています! これはコード管理を悪夢にするだけでなく、アクションを追加するたびに再コンパイルする必要があります。
私の最初の本能は、各アセンブリに一連のアクションが含まれる実行時にシステムをアセンブリに動的にリンクさせることでした。これは、アプリケーションに拡張機能を追加することに似ています。MEF フレームワークについて考えましたが、それは適切ではありませんでした。
私が考えることができる唯一の代替手段は、各アクションをソース コードまたはコンパイル済みモジュールとしてデータベースに格納することです。ソースとしての保存は安全性が低くなりますが、コードのレビューと継続的なメンテナンスをより詳細に制御できるなど、それぞれに独自のトレードオフがあります。コンパイル済みとして保存すると、サーバー側のアセンブリ署名の利点があります。
このようなシステムを構築する方法についてアドバイスをいただければ幸いです。