たまたまWM6(Windows Mobile 6)をベースにしたPocketPCを購入しました。
たくさんのタスクとタスクがある瞬間まで、すべてが素晴らしいものでした。3つの製品間で完全な同期が必要でした。
- 進化
- Windows Mobile Outlook
- MS Office Outlook
ソリューションを検索する
インターネットで検索したところ、USBケーブルを介してEvolutionをPDAと完全に同期できないことがわかりました(WM6はまだサポートされておらず、WM5との同期プロジェクトは完全に終了しました)。
さらに、理論的には、Exchangeサーバーを介して3つすべてのシステムを同期できることがわかりました(これが正しいアプローチです)。 しかし、ネットワーク上に無料のExchangeサーバーは見つかりませんでした(見つけましたが、ログインに@記号が使用されていたため、Evolutionはそのサーバーの使用を拒否しました)。 しかし、検索を試みたのではないかもしれません-車輪を再発明して、新しいことを学ぶのを楽しんで経験を積むことが好きです。
挑戦する
タスクは一般的に明確でした。 同期を提供するプログラムを作成する必要がありました。
しかし!
私は、3つのシステムすべてに対して3つの異なるプログラムを作成したいとはまったく思いませんでした。 複雑さを最小限に抑えるような方法で作業を整理する必要がありました。
特定のレビューの後、私は見つけた:
1. MS Office Outlookは、.NETアプリケーション用のオブジェクトモデルを提供します。
2. Evolutionは、モノラルアプリケーション用のオブジェクトモデルを提供します。
知らない人のために:monoは.NET Frameworkのクロスプラットフォーム(Win / * nix / Mac)実装です。
3. WM Outlookは、.NETアプリケーション用のオブジェクトモデルを提供します。
クラス! だから私はすべてをC#で書くことができます!
解決策
最も重要なことは、すべてをうまく設計することです! 私はいくつかの抽象的なモデルを構築しました:
同期プロバイダーは抽象クラスです。 3つのデータソースすべてについて完了する必要があります。
シンクロナイザー -データの違いを検出し、同期プロバイダーと対話するためのシステム。 3つのプログラムすべてに統一されています。
ネットワークマネージャー -ネットワーク経由でアプリケーション間でデータを交換するシステム(直接またはサーバーを介して-重要ではありません)。
Configurator-構成を操作するためのシステム。
システム機能 -さまざまなプラットフォームでの作業の機能に関するデータを保存するサブシステム。
これらの責任分野を次のように配分しました。
プログラム: 同期プロバイダーの実装
ライブラリ(Sync.dll): シンクロナイザー 、 ネットワークマネージャー 、 コンフィギュレーター
ライブラリ(Platform.dll): システム機能
すべての人に同じSync.dllライブラリを作成し、3つのプログラムすべてに同期プロバイダーを実装し、実行中のシステムの機能を報告するPlatform.dllを作成していることがわかります(機能には、目的のフォルダーへのパス、パス区切り文字が含まれる場合があります)など)。
働くために!
Visual Studioを起動し、Sync.dllを一度に実装しました。 それからWM Outlookが取り上げられ、(仮想デバイスでデバッグを設定するときのセックスの後)、最初の同期プロバイダーを作成しました。
ダックスフンド...今進化。 MonoDevelopを起動し、進化モノバインディングをインストールしました(パッケージには正しい依存関係がなかったため、性別が非常に大きくなりました)。 そして、2番目の同期プロバイダーが書きました!
立ち上げ、そして見よ! Evolutionの連絡先がPDAにコピーされました! 今、あなたはあまりにも後退ギアを仕上げ、ささいなことを修正する必要があります! :-)
まとめ
.NETが本当にクロスプラットフォーム(そして、いわばクロスデバイス)になったことに驚きました! 3つの異なるプラットフォームに同じコードを書くことができることに気付きました。そのうちの1つは一般にPDAです。 そして、ここには想像力の余地がたくさんあります! :-)