Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Xamarin.Forms とコンソールアプリでモデル層を共通化してみた
Search
Yu_ka1984
March 11, 2017
Technology
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Xamarin.Forms とコンソールアプリでモデル層を共通化してみた
Yu_ka1984
March 11, 2017
More Decks by Yu_ka1984
See All by Yu_ka1984
EventGridTopicで手軽にイベントドリブンを手に入れる
yukaabuno
5
1.8k
Durable Functionsを"公式ドキュメントとは違う形で"話して見る
yukaabuno
3
910
Durable Functionsの特徴をふわっと理解してみる
yukaabuno
2
190
Xamarin.Forms 使うべき?
yukaabuno
3
1.3k
Other Decks in Technology
See All in Technology
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
330
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
1
230
VLA-JEPA: Enhancing Vision-Language-Action Models with Latent World Models
takmin
0
150
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
140
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
210
その Valkey 使いこなしていますか?
onk
PRO
5
1.9k
「エーアイ」をバズワードにしないために RPA 導入経験と Kiro 上での Claude モデル利用経験から
kazzpapa3
0
120
AI駆動開発における開発環境のセキュリティの考え方
yamahiro
2
400
AWSDirectConnectの構築の進め方を整理してみた
masa_my
1
150
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
160
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
190
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
220
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
67k
What's in a price? How to price your products and services
michaelherold
247
13k
The Curious Case for Waylosing
cassininazir
1
570
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
810
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
Xamarin.Forms とコンソールアプリでモデル層 を共通化してみた まどすた #2 2017/03/11 Yuka Abuno
@yu_ka1984 Yuka Abuno http://tamafuyou.hatenablog.com/ シグマコンサルティング株式会社 アーキテクト になることが目標
初めてXamarin.Formsを使ったスマホアプリプロジェクトは WPFアプリをスマホで使えるようにするプロジェクトでした。 ほとんどコード共通化できなかった(´・ω・`)
.NET Frameworkで書けるクライアントアプリ 2010年当時 現在 ▪ コンソールアプリ ▪ Windows Forms (まだまだ現役!(^^)!)
▪ WPF ▪ UWP ▪ Xamarin Mac ▪ Xamarin Android ▪ Xamarin iOS ▪ Unity ▪ erc ▪ コンソールアプリ ▪ Windows Forms(当時も現役!(^^)!) ▪ WPF ▪ Mono Gtk# ▪ SilverLight
Xamarin開発だけでも Xamarin.Formsを使ってクロスプラットフォーム開発 UIも共通コードで爆速\(^o^)/ Xamarin Nativeで各プラットフォーム毎に Nativeと同じ実装方法で 最適なUIを目指して開発 一つのプロダクトでXFとXNの2タイプの開発を行うこともあり得る。
これからの.NETアプリ開発は マルチプラットフォーム開発を通り越して マルチタイプ開発が前提になる かもしれない・・・
C#のGUIアプリは Model – View – Whatever M V C P
VM M V M V
VM fat VM M V Model層にある関数をコールして 戻り値を受け取ってVMに反映 VMでロジックが書かれている VM fat
マルチタイプ what ever M V クライアントGUIタイプ コマンド CLIタイプ タイプが違っても共通化で きるのるはモデル層
• バックエンド • ハードウェアデバイス • インフラ
モデル層は入出力をつなげたら動く タイプに依存しないアプリケーションそのもの
アプリケーションそのものなモデル層は コンソールアプリでも使えるはず
簡単なチャットアプリを作ってみました。 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 とコンソールアプリでモデル層を共通化して
Visual Studio 2017 RC ChatSample クラスライブラリ(.NET Standard) App1 Xamarin.Forms (
Shared ) ConsoleApp1 コンソールアプリ(.NET Core) https://github.com/yuka1984/ChatXFSample
ChatServiceクラス 入力 非同期メソッド • LoadRoomsAsync • JoinRoomAasync • ExitRoomAsync •
SendMessageAsync 出力 • INotifyPropertyChanged(BindableBase) • INotifyCollectionChanged (ReadOnlyObservableCollection) • ErrorEventHandler 入力 状態変更通知
インスタンス管理 アプリケーションを構成するためのモデル層のインスタンスを提供する事はモ デル層の責務 コンテナーを使ってアプリに必要なモデル層のインスタンスをモデル層で構築 して引き出せるようにする。 Repositoryクラスやプラットフォーム依存となるようなクラスはInterfaceを 作成して差し替えられるようにする
Xamarin.Formsの場合 ▪ MVVM ▪ ViewModelクラスとViewクラスは基本的に1対1の関係(例外あり) ▪ ViewModelクラスとServiceクラスはN対Nの関係 ▪ ReactivePropertyを使用することでサービスクラスの変更通知に対する ViewModelのプロパティへの反映を行う
V M V M V M V V V S S S
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();
コンソールアプリの場合 ▪ ごりごり実装してみました ▪ サービスクラスの変更通知はイベントで受信してコンソール出力へ反映
まとめ ▪ これからの.NETクライアント開発はマルチプラットフォームに加えてマルチタイプ開発を 意識すると良いかもしれない ▪ モデル層はアプリケーションそのもの ▪ .NETプログラマにマルチプラットフォーム/マルチタイプ開発な環境を用意してくれて、 様々なプラットフォーム開発の知識やデザインパターンの勉強をさせてくれる凄い人た ちに
感謝っ・・・・! 圧倒的感謝っ・・・・!
ご清聴ありがとうございました。