Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Xamarin.Forms とコンソールアプリでモデル層を共通化してみた

Xamarin.Forms とコンソールアプリでモデル層を共通化してみた

Yu_ka1984

March 11, 2017
Tweet

More Decks by Yu_ka1984

Other Decks in Technology

Transcript

  1. .NET Frameworkで書けるクライアントアプリ 2010年当時 現在 ▪ コンソールアプリ ▪ Windows Forms (まだまだ現役!(^^)!)

    ▪ WPF ▪ UWP ▪ Xamarin Mac ▪ Xamarin Android ▪ Xamarin iOS ▪ Unity ▪ erc ▪ コンソールアプリ ▪ Windows Forms(当時も現役!(^^)!) ▪ WPF ▪ Mono Gtk# ▪ SilverLight
  2. 簡単なチャットアプリを作ってみました。 http://websocketscaletest1.azurewebsites.net/ ASP.NET Core の WebSocketとスケールアウトを検証する ために作ったブラウザサンプルアプリ。 バックエンド -> •

    Azure WebApps • ASP.NET Core • ASP.NET WebSocet Server • Azure ServiceBus フロントエンド-> • Vue.js (JavaScript MVVM フレームワーク) フロントエンドを コンソールアプリ Xamarin.Forms(Android/iOS) で作成 Xamarin.Forms とコンソールアプリでモデル層を共通化して
  3. Visual Studio 2017 RC ChatSample クラスライブラリ(.NET Standard) App1 Xamarin.Forms (

    Shared ) ConsoleApp1 コンソールアプリ(.NET Core) https://github.com/yuka1984/ChatXFSample
  4. ChatServiceクラス 入力 非同期メソッド • LoadRoomsAsync • JoinRoomAasync • ExitRoomAsync •

    SendMessageAsync 出力 • INotifyPropertyChanged(BindableBase) • INotifyCollectionChanged (ReadOnlyObservableCollection) • ErrorEventHandler 入力 状態変更通知
  5. ReactiveProperty モデル側の プロパティ VM側のプ ロパティ Rx public RoomModel SelectedRoom{ get

    { return selectedRoom; } private set { this.SetProperty(ref this.selectedRoom, value); } } public string UserName { get { return username; } private set { this.SetProperty(ref this.username, value); } } ReadOnlyReactiveProperty<string> Title = service.ObserveProperty(x => x.SelectedRoom).Select(x => x?.Name) .CombineLatest( service.ObserveProperty(x => x.UserName), (roomname, username) => $"{username} - {roomname}" ) .ToReadOnlyReactiveProperty();