web-dev-qa-db-ja.com

言語間でコードを複製する必要がありますか?

私が働いている場所では、デスクトップソフトウェア開発(Delphi)とWebアプリ(asp.net/c#)用に言語を使用しています。上司は私にWebサイトに機能を実装することを望んでいますが、いつか私たちのソフトウェアの1つにそれが必要になる可能性があると考えているため、Delphiで機能を開発するように頼みました。

過去に同じ状況が発生したとき、私の同僚は彼のC#コードでDelphi DLLを呼び出しましたが、そのコードをデバッグしようとして複数の問題がありました。

C#で機能を書き換えるか、DLLを呼び出すのが最善ですか?

コードの性質は何ですか?それが例えば暗号化や画像処理などの数値計算では、DLLにパッケージ化するのは簡単です。それが何かである場合マルチスレッドI/O、それはおそらくはるかに複雑です。

複雑なケースでは、DLLの代わりに、API(REST、json-rpc、protobufs、thriftなど)を使用したサーバープロセスを検討します。 Webサーバー部分は、そのAPIを介してそれを呼び出すことができます。

各パーツを分離して実行できるため、各パーツの開発とデバッグがはるかに簡単になります。

通常、コードの複製はお勧めできません。実装は時間とともに分岐する傾向があり、プラットフォームの違いによりわずかな不一致が生じる傾向があります。

9
9000

コードの複製は、オリジナルと複製の両方の保守と進化が互いに独立していて、一方の側で変更を加えるときに、もう一方の側を自動的に変更する必要がない場合にのみ許容されます。

ただし、これらの前提条件が満たされている場合でも、複製を作成することで相乗効果を無駄にすることがあります。

しかし、主な使用シナリオが「Asp.net/c#」である場合は、あなたがしたように、反対の方法でこれに取り組みませんか?別のC#DLLで機能を開発し、これをDLL COM対応(説明 ここ のように)にしてください)にすると、C#ではかなり簡単になります。後でDelphiプログラムで(「いつか」はいつか来ると仮定されます)。

1
Doc Brown