メンテナンスされていないアプリケーションの陳腐化を防ぐための認識された方法を私は知りません。
製品が陳腐化するのを防ぎたい場合は、アップグレード可能になるように設計してください。
.NETでは、少なくとも、再利用可能なコンポーネントを作成するための多くのオプションがあります。
個別のアセンブリ。任意の.NETプロジェクトで使用でき、後で別のテクノロジを使用する必要が生じた場合にCOM相互運用機能をサポートするように拡張できます。
ウェブサービス; これらは公開され、ほとんどすべての環境から使用できます。
インターフェイスと制御の反転を使用して、自由に交換可能なコンポーネントをサポートできます。これは、理論的には.NETでもないもの(COMラッパーを作成するだけ)からのものである可能性があります。
プロセス間通信-他のすべてが失敗した場合は、文字通り、メモリマップトファイルまたは名前付きパイプを作成し、新しいアプリケーションから(または宛先に)データを送り始めることができます。
実際、これらの多くはおそらく現在のVBプロジェクトに当てはまります。通常、コア機能を新しいテクノロジーに徐々に移行しながら、既存の製品の耐用年数を延ばす方法は無数にあります。
私は筋金入りのSOAではありませんが、これはまさにSOAが解決しようとしている種類の問題です。私は多くのサービスを行っています-実際、ここで重要なほとんどすべては、ある時点で何らかのWebサービスを経由します-いつでもサービスを完全に取り除いて、上のサービスに置き換えることができることを知っているので、非常に快適です。別のプラットフォーム。それがしなければならないのはSOAPまたはJSONを吐き出すことだけであり、私の.NETクライアントはそれをまだ消費することができます。または、クライアントを置き換える必要がある場合は、サービスにすでに存在するリッチドメインモデルに接続することもできます。
実際、私はすでにこれを行っています。アーキテクチャは、Delphi7プラットフォーム上に完全に構築されていました。現在はすべて.NET3.5上にあり、あるシステムから次のシステムへのハードカットオーバーは実際にはありませんでした。プレーンなSOAPサービスの構築を開始し、アプリケーション内のビジネスロジックの多くをサービスに移動しました。最終的に、アプリケーションがシェルにすぎなかったときに、いくつかの.NETクライアントに置き換えました(いくつかあります)。その後、新しいプラットフォームでのみサポートできるさまざまなセキュリティ機能と最適化の追加を開始しました。などなど。
したがって、事前に計画を立てれば、間違いなく実行できます。もちろん、ここにはYAGNIを引用して、事前の計画に反対するアドバイスをする人がたくさんいます...そして、特定のプロジェクトについてはそうかもしれません。それはすべて、プロジェクトがどれだけ高価でミッションクリティカルであるかに依存します。製品を50年間使用する必要がある場合は、サブコンポーネントの追加と削除を簡単にする堅固なアーキテクチャと設計への投資を検討することをお勧めします。