1

C#でrubymsgpackサーバーと通信するための小さなアプリケーションを構築しようとしています。これまでの私の唯一の問題は、サーバーの背後にあるAPIがルビーハッシュを引き出すことを期待していることです。C#で単純な辞書/キーと値のペアタイプを使用できますか?そうでない場合、あなたは何を提案しますか?

msgpack Webサイト(http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+C+Sharp)に記載されているライブラリを使用します。ただし、プリミティブ型のみをサポートしているようです。私はIronRubyの方法を試してみましたが、monoには非常に重大なバグがあり、使用できません。https://bugzilla.xamarin.com/show_bug.cgi?id=2770

4

1 に答える 1

0

システムのさまざまな部分がさまざまなテクノロジ スタックを使用して構築できるのは普通のことです。これらのパーツは (この方法または別の方法で) 相互に通信できる必要があるため、サブシステム間のコントラクトを指定することが重要です。

システムのこれらの部分 (サブシステム) は (ビジネス ロジックの進化、バグ修正などにより) 変更の対象になる可能性があるため (そして、間違いなくそうなる可能性があるため)、これらのコントラクトについて最初に考えることが非常に重要です。

これらのコントラクトを持つことで、すべての「クライアント」(他のサブシステム) に影響を与えることなく、サブシステムを個別に変更できます。そうしないと、「これを修正する必要がありますが、私が知らない多くの場所に影響を与える可能性があります」という症候群に陥ります。

まあ、契約を結ぶとすぐに、与えられたサブシステム内でやりたいことが何でもできます。それはまさに天国です! :)

これは、通常、「ルビー ハッシュを引き出す」のではなく、アプリケーションのビジネス ロジックに関する側面として公開される、プラットフォームに依存しないコントラクトを定義する必要があることを意味します。このコントラクトは、任意のテクノロジで記述された他のサブシステムで使用できます。

また、サブシステム間でデータを渡すだけでなく、オブジェクトを渡す必要があることも意味します。これらのオブジェクトには、渡したいデータが含まれているだけでなく、このデータを説明し、意味を掘り下げます。この「説明」とは、オブジェクトの種類、プロパティ名などを意味します。オブジェクトは自己記述的です。

「これらのクエリを受け入れ、これらの結果を返す」という Ruby サブシステムのコントラクトを宣言できます。クエリ (メソッド) と結果 (オブジェクト) の両方を、指定されたサブシステムのビジネス ロジックの観点から定式化する必要があります。たとえば、コントラクトはおそらく、意味のない「ルビー ハッシュ」ではなく、オブジェクトGetProductsのリストを返す必要があります。Productしたがって、すべての消費者は、契約とは何か、何を期待すべきかを知ることができます。

次に、「サブシステム間で渡されたすべてのオブジェクトが JSON (または XML) にシリアル化される」と言って、それを標準にすることができます。これは、Ruby、C#、またはその他の言語では些細なことであり、真にプラットフォームに依存しません。

したがって、あなたの質問に戻ると、通常、いくつかのバグのあるライブラリを使用して ruby​​ 型を .NET 型に変換したり、同様のクレイジーなことを行ったりするような問題はライブで発生しません:)

コントラクトを定義し、トランスポート (JSON?) を標準化するだけで、この問題を取り除くことから始めて、クリーンで保守しやすいシステムを実現するまで、多くの点で役立ちます。

于 2012-02-18T03:53:40.327 に答える