0

概要

  • 過去 3 年間で、フル機能のソフトウェア パッケージを C# で構築してきました。
  • 私たちのソフトウェアは、アプリケーションに必要な多くの低レベルの配管を処理するように設計されているため、開発者はすべての詳細ではなく、解決しようとしている特定の問題に集中できます。これにより、開発とリリースの時間が大幅に短縮されました
  • そのため、コードはさまざまなプロジェクトに分割され、論理的に分離されます (たとえば、フロントエンド MVC アプリ、サービス レイヤー、コア フレームワーク レイヤーなど)。
  • 私たちのコア フレームワーク プロジェクトには多くの機能が組み込まれており (アプリケーションの主要な「内臓」)、すべての人になじみのあるさまざまな名前空間 (データ アクセス、IO、ログ記録、メールなど) に慎重に編成されています。
  • これを最初に構築したときは、常に私たちのチームがターゲットオーディエンスになることを意図しており、開発者はさまざまな新しい機能をコーディングし、必要に応じてフレームワークに追加しました.

チャレンジ

  • 現在、上司は、コードベースをサードパーティの開発者や社外のチームに公開できるようにしたいと考えています。これらのサードパーティの人々は、私たちのコア ライブラリを直接利用して、私たちのサーバーにデプロイされる独自のモジュールを構築できる必要があります。アプリケーションの性質上、RESTやSOAPなどを介して機能を公開することで解決できるものではありません。コアライブラリに対して開発してコンパイルできる、私たち自身のような環境で動作する必要があります。リリース用の独自の DLL
  • これは、知的財産 (コードの内部動作を保護できなければならない)、配布、展開、バージョン管理、テスト、およびリリースに関して多くの懸念と課題を引き起こします。おそらく最も重要なのは、これらに最もよく適合するようにフレームワークを形成する方法です。ニーズ。

どのようなアドバイスをしますか? これにどのようにアプローチしますか?どのようなものを変えたいと考えていますか、またはどのようなデザインアプローチに移行しようとしていますか? これらの質問は非常に自由で、おそらく漠然としていることは承知していますが、主に、同様の課題に直面している可能性のある人々から、あなた自身のバックグラウンドからのアドバイス、リソース/チュートリアル、またはストーリーを探しています. ありがとう!

4

2 に答える 2

2

MEFの答えが本当にあなたの問題を解決するかどうかはわかりません。インターフェイスとMEFを使用して実装をコントラクトから分離する場合でも、実装を提供する必要があります(質問を理解しているため)。したがって、MEFを使用すると、IPを使用してアセンブリを提供する必要がなくなります。

肝心なのは、実装アセンブリを配布する必要がある場合、これらのサードパーティがIPを持ち、それらを逆コンパイルする機能を持っているということです。.NETでその問題を回避する方法はありません。最後に確認しました。難読化を使用して難読化を難しくすることもできますが、これによって誰かが実装を逆コンパイルするのを防ぐことはできず、読みにくく、理解しにくくなります。

ご指摘のとおり、SaaSタイプの境界の背後に実装を配置するのが最善のアプローチですが、それは問題外のようです。

追加するのは、堅牢なバージョン管理モデルを開発することを強くお勧めすることです。これは、インターフェース/ APIの定義方法、時間の経過とともにそれらを変更する方法、およびアセンブリのバージョン管理方法に影響を与えます。注意せず、アセンブリにAssemblyVersionとの両方を組み合わせて使用​​しない場合AssemblyFileVersion、APIクライアントからの不要な再コンパイルを強制することになり、これは大きな頭痛の種になる可能性があります(一部の大手コントロールベンダーでさえもそうしていません)。悲しいことに、この権利を処理します)。 私の意見では、API /コンポーネントベンダーにとって非常に重要なので、これらを読んでください。

@trailmaxが示すように、NDAやライセンス契約は、ユーザーがそのような契約を尊重すると思われる場合の別の方法です(個人と企業では、これらのタイプの契約の見方が異なる場合があります)。

ああ、また、あなたが強い名前であなたのアセンブリに署名することを確認してください。そしてこれを行うには、おそらく署名キーを保護するための戦略を確立する必要があります。これは最初は簡単に思えますが、署名キーを適切に保護することは、最初の赤面のように簡単ではありません。多くの場合、さまざまな環境に対応する複数のキーセットが必要であり、キーをCI / CDシステムに組み込む必要があり、リリースキーへのアクセスが確実に保持されるようにする必要があります。

于 2013-03-18T18:06:26.957 に答える
0

@HighCore がすでに述べたように、公開したいすべてのもののインターフェースを実装します。それらを別のプロジェクト/リポジトリに配置し、プロジェクト/リポジトリへの読み取り専用アクセスを付与します。しかし、あなたのインターフェースは適切に文書化されていなければなりません。

このようにして、あなたのコードは彼らには実際には見えず、彼らはまだそれを作業することができます.

それでもうまくいかず、コードを見せざるを得ない場合は、NDA に署名してもらいます。NDA は、あなたのコードはあなたのものであり、いかなる方法でも再配布できないことを述べる必要があります。

私の答えは質問と同じくらい漠然としていると思いますが、いくつかのアイデアを提供します。

于 2013-03-18T17:50:57.183 に答える