WinRTは本当に境界でのみ使用できますか?


15

Microsoft(主にHerb Sutter)は、WinRTをC ++ / CXとともに使用して、WinRTをアプリケーションの境界に保ち、アプリケーションのコアを標準ISO C ++で記述したままにすることを推奨しています。

私は移植性を残したいアプリケーションを書いているので、私のコア機能は標準C ++で書かれており、C ++ / CXを使用してMetroスタイルのフロントエンドを書こうとしています。ただし、このアプローチには少し問題があります。たとえば、ユーザー定義のC ++型のベクトルをXAML ListViewコントロールにプッシュしたい場合、ユーザー定義型をWinRT ref / value型にラップして、に格納する必要がありVector^ます。このアプローチでは、C ++クラスの大部分をWinRTクラスでラップする必要があります。

C ++で移植可能なネイティブアプリケーションを記述しようとしたのはこれが初めてです。このような境界に沿ってWinRTを維持することは本当に実用的ですか?プラットフォーム固有の境界を持つこのタイプのポータブルコアは、他にどのように処理できますか?


Modelが標準C ++、VおよびVMがWinRT相互運用オブジェクトであるMVVMのようなものですか?
最大

5
「しかし、各VMは事実上、私の標準モデルのラッパーになります。」-これは、どのシナリオのビューモデルでも非常に一般的です。
-MattDavey

1
@ GlenH7、私はコメントが主にこれに答えていると信じています。私は同じ結論に達しましたが、誰かがもっと賢い考えを心に抱いていることを望んでいました。一般的に、物事はただの方法です。コードの一部を分離するために最善を尽くすことができますが、ほとんどの場合、コードのプラットフォーム固有の部分(上記のViewModelの例など)を書き換える必要があります。
ブレットKuhns

1
@ GlenH7おそらく、プラットフォーム間でアプリケーションコードの一貫性を保つ唯一の方法は、独自のプラットフォームアブストラクションレイヤーを書くことですが、それらのレイヤーは、結局私が避けようとしていたものになります。物事を分離するための層の抽象化により、単に問題を移動させるだけです。おそらく役立つかもしれませんが、最終的にあなたはまだ仕事をしています。
ブレットKuhns

1
Android上のCライブラリをJavaにシームレスに接着するための「銀の弾丸」を作成しようとしました。最後に、〜×10の時間を費やし、エキゾチックなデバッグ手法を使用して(フロンティアでの異常な動作を回避するために)動作する可能性があります。間違いなく、楽しかったです。
アレックスコーン

回答:


8

私見(古いプログラマ。マイクロソフトで働いていますが、これは個人的な意見です):この質問に答える前に、この他の質問に答える必要があります。

コードはどこに移動しますか?単一のプラットフォーム(この場合はWinRT)に固執している場合は、プラットフォームに近づいてください。つまり、既存の抽象化を使用することを意味します。あなたの例では、WinRTのニーズに合わせてコードでVector ^を使用します。

OTOH、他の場所に移動している場合(VMSが揺れる!)、標準ベースは理にかなっています。

市場にある3つの最大のポータブルなタブレットのようなプラットフォームはすべて、共通のプログラミングタスクに異なる言語を使用しているため、コードの移動は価値のあるオプションではないかもしれません。


同意する。WinRTをターゲットにしたプロジェクトを開始しましたが、Android / iOSを移植するのに魅力的なプラットフォームであることを知っていたため、この質問が生じました。それ以来、WinRT専用に書くことにしました。プロジェクト自体が人ごみを引き寄せる場合は、移植(または別のプラットフォームへの書き換え)を心配します。
ブレットKuhns

@alexcohnが指摘したように、その時点でコア機能が十分に重いため、クロスプラットフォームに移行することに決めた場合、プラットフォーム固有のレイヤーでポータブルコードをラップする価値があります。それ以外の場合は、コードを書き直し、テストスイートを使用して、異なるプラットフォームでの動作を検証します(適切な場合)。
ブレットKuhns

0

C ++ / CXを使用する必要はありませんが、代わりにWRL(Windows Runtime Libraryある「ふり」のC ++ではなく、古いATLテンプレートに似た)を。MSからWinRTオブジェクトを消費する「低レベル」アプローチであり、Grandadが書いていたような完全に標準的なC ++です。

C ++ / CXほど「いい」ものではないかもしれませんが、それは意見の問題です-私個人の意見では、C ++ / CXは拡張C ++の3回目の試みであり、3回目の失敗です。それを無視して、他の2つの化身と同じように進むことを望みます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.