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
設計例 (ODC) : EventでUIから重たい処理を切り離す
Search
Junji Watanabe
July 26, 2024
Technology
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
設計例 (ODC) : EventでUIから重たい処理を切り離す
OutSystems東京開発者コミュニティ 2024/07/25
Junji Watanabe
July 26, 2024
More Decks by Junji Watanabe
See All by Junji Watanabe
OutSystems CoEチームの技術的サポート
junjiwatanabe
0
300
生成AIのODC周辺開発(External Logic)への適用例
junjiwatanabe
0
380
Mentor 生成アプリの構造解析
junjiwatanabe
0
230
Web Developer Specialist (ODC)
junjiwatanabe
0
710
ODC向けAI Mentor System
junjiwatanabe
0
230
認定資格の取り方
junjiwatanabe
0
1k
Other Decks in Technology
See All in Technology
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
200
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
650
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
360
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
660
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
5
1.3k
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
120
Optunaの最新リリースv5.0について
pfn
PRO
0
120
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
130
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
React改造してみた
tsukina_7mochi
0
120
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
420
How to make the Groovebox
asonas
2
2.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Being A Developer After 40
akosma
92
590k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
From π to Pie charts
rasagy
1
400
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Transcript
設計例 (ODC) : EventでUI から重たい処理を切り離す OutSystems東京開発者コミュニティ 2024/07/25 OutSystems MVP 渡部
潤司 : https://qiita.com/jyunji_watanabe : https://twitter.com/JyunjiW : https://www.linkedin.com/in/watanabejyunji/ Qiita X LinkedIn
本日の内容 1. ODCのEventとはなにか 2. Eventを使った設計例
1. ODCのEventとはなにか
ODCにおけるEventとは(イメージ) 他App イベントハンドラー (Server Action) 他App イベントハンドラー (Server Action) ②Action
FlowでEvent を発生させる (処理はそのまま継続 ⇨つまり非同期) ①ODC Studioの Eventsタブの下で作成 するプログラミング要素 ③Eventを参照し、発生 時のイベントハンドラー をApp毎に作成できる
ODCにおけるEventとは • App内で何らかの事象が発生したことを示すプログラミング要素(Eventsタブの下にある) • Eventを参照しておくと、そのEventが発生したときに自動で実行されるServer Action (Event Handler 。タイムアウトは2分と短め)を指定できる(これをSubscribeと呼ぶ) •
Subscribeは複数のAppから行える • Eventを発生させるにはTrigger EventをAction Flowに配置 • 重要なのは、 ◦ Eventを発生させる側と、Eventを受け取って動く側を切り離して非同期に処理できる ◦ 他のApp等のEvent Handlerに対してPushで操作を起動できる(なお、試してみた範囲では、起動にかかる時 間はOutSystems 11におけるLight BPTと遜色なく、ほぼ一瞬だった) Light BPTはEntityのCreateに呼応する Actionを書ける機能
Eventの使い所例 • 非同期で発生するイベントを待ち受ける • 小さなバッチ(タイムアウトが2分であることに注意) • Sagaパターン(コレオグラフィー) ◦ Sagaパターンは、複数のサービスにまたがるトランザクションを、ローカルトランザクションのつながりとして実現する ◦
コレオグラフィーは、この複数サービス間のやりとりをMessage Broker経由で行うので、まさにEventはODC上でこ の仕組みを実現するのにうってつけ ◦ Sagaが必要な設計をすると、構築・保守共に大変になりそうなので避けたいところではある • UIから重たい処理を分離し、非同期で処理する 今日は個々の例を見ていきたい
2. Eventを使った設計例
こんなアプリケーションを運用していたとする Excelからレコードを読み取る レコードをループして処理 1レコードあたりおよそ100ms 処理結果を返す Server Action Excelファイル をアップロード Excelファイルには大体200レコード
1レコードあたり100msなので、200 x 100ms ≒ 20秒 余裕を持ってServer Request Timeoutは30秒に設定
実装例 Sleepで「重たい処理」をシミュレート
「最近アップロードに失敗することがある。その場合は繰り返し てもだめなのでファイルを分割して対応している」という問い合 わせ ⇨調べてみると、アップロードされるファイルサイズは拡大傾向 で、今後も増えることが想定される こんな状況になったらどうするか? Server Request Timeoutは上限1分
Eventを使った対応例 Excelからレコードを読み取る レコードをDBに登録しEvent をTrigger 1レコードあたりおよそ100ms 処理状況EntityのIdを返す Server Action1 ①Excelファイ ルをアップロー
ド 処理状況 Entity Excelレコード Entity ②Excelの中身はDBに 登録し、すぐに制御をUI に戻す ③UIでは定期的(5秒と か)で処理状況を確認 Server Action2 ④Subscribeし ているハンドラ ーが起動 ⑤登録され ているデー タを処理
実装例①:事前準備 処理状況 Entity Excelレコード Entity Excelファイル内の各行が1レコードに対 応する Excelファイルのアップロードが行われた ことを通知するEvent イベントハンドラーが処理
対象のレコードを知るた め、参照を持たせておく
実装例 Entityにレコードを登録し、 EventをTriggerしたらす ぐに終わる イベントハンドラー:Entityか らレコードを取り出し、ループ で処理する 適当なところでステータスを 更新してコミットする
もちろん他の修正案もある 1. Eventの代わりにTimerを利用 ◦ 定期実行で複数のアップロードファイルを一括処理でいいとき 2. アップロードしたデータをEntityに登録するまではEvent案と同じだが、登録した結果は画面に 表示し、それを確認したユーザーが別のボタンをクリックすると取り込み処理を起動する ◦ Entityへの登録と、その後のループ処理が同じような処理時間であれば、この方法でもうまくいくかもしれない
3. クライアント側でファイルを分割し、ループ処理する ◦ Excelのまま読むなら、何らかのライブラリが必要になるかもしれない ◦ アップロードするファイルをCSVにできるならもっと楽かもしれない 選択肢を把握して、要件に合わせた方法で 実装するのが大切
以上