Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリのリニューアル時にDomainModelを削除した話(設計カンファレンス extends...
Search
domonr
March 29, 2024
Technology
0
700
アプリのリニューアル時にDomainModelを削除した話(設計カンファレンス extends OOC 2024.3.29)
domonr
March 29, 2024
Tweet
Share
More Decks by domonr
See All by domonr
(iOS13の)UIBarButtonItem 位置調整あるある
domonr
0
1.1k
あるあるLT~文字列共通化~
domonr
0
600
あるあるLT_domonr_2019-03-19.pdf
domonr
0
1.5k
脱ぼっちレビュー_domonr
domonr
0
400
Other Decks in Technology
See All in Technology
AIでテストプロセスを自動化しよう251113.pdf
sakatakazunori
0
150
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
7
490
AI × クラウドで シイタケの収穫時期を判定してみた
lamaglama39
1
300
米軍Platform One / Black Pearlに学ぶ極限環境DevSecOps
jyoshise
2
410
AIと自動化がもたらす業務効率化の実例: 反社チェック等の調査・業務プロセス自動化
enpipi
0
610
改竄して学ぶコンテナサプライチェーンセキュリティ ~コンテナイメージの完全性を目指して~/tampering-container-supplychain-security
mochizuki875
1
250
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
130
『HOWはWHY WHATで判断せよ』 〜『ドメイン駆動設計をはじめよう』の読了報告と、本質への探求〜
panda728
PRO
5
1.9k
はじめての OSS コントリビューション 〜小さな PR が世界を変える〜
chiroito
4
330
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
0
180
Lazy Constant - finalフィールドの遅延初期化
skrb
0
220
Dart and Flutter MCP serverで実現する AI駆動E2Eテスト整備と自動操作
yukisakai1225
0
540
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Thoughts on Productivity
jonyablonski
73
4.9k
The Language of Interfaces
destraynor
162
25k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Site-Speed That Sticks
csswizardry
13
960
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
BBQ
matthewcrist
89
9.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
We Have a Design System, Now What?
morganepeng
54
7.9k
Transcript
アプリのリニューアル時に DomainModelを削除した話 土門@rd05011 設計カンファレンス extends OOC 2024.3.29
自己紹介 • 土門良輔(@rd05011) • iOS/Flutter Engineer • App Engineer @
WHITEPLUS, inc. ◦ 2023.4.1入社 ◦ 宅配クリーニング「リネット」のア プリを開発しています 2
None
4 アジェンダ アプリリニューアルに伴うリアーキテクチャのポイント リアーキテクチャ方針 01 02 アプリケーション層とドメイン層を削除 アプリケーション層を一部画面に復活させる 03 04
まとめ 05
5 01 アプリリニューアルに伴う リアーキテクチャのポイント
6 01 アプリリニューアルに伴うリアーキテクチャのポイント • アプリの役割が変化しそれに伴い求められる責務も変わってきた • 元々、多くの機能がネイティブ実装されていたため、アプリ側で 様々なロジックの実装を行なってた • 現在は、アプリ側にはロジックはあまり無く、サーバーから受け
取ったデータを表示することが主な責務になっている • よりシンプルな設計にすることで複雑性を下げることができ、開発 効率の向上が見込めると考えた
7 02 リアーキテクチャ方針
8 02 リアーキテクチャ方針 • 元々は、プレゼンテーション層、アプリケーション層、ドメイン層、インフラ 層の4つの層で構成されていた • しかし、現在のアプリではロジックはほぼ無くなり、主にデータの詰め替えの みを行っていた •
アプリケーション層とドメイン層を削除し、シンプルな設計に移行することに
9 03 アプリケーション層と ドメイン層を削除
10 03 アプリケーション層とドメイン層を削除 • アプリ側にロジックがほぼ無いため、必要なものはデータを取得す る層と表示する層だけなので、アプリケーション層とドメイン層を 削除 • 設計がシンプルになり、画面ごとのファイル数が減少し、不要な ファイルの作成時間もなくなり開発効率がアップ
11 しかし、問題発生
12 03 アプリケーション層とドメイン層を削除 • アプリ側にロジックがほぼ無いが、一部機能にはロジックがある • その画面でプレゼンテーション層が肥大化 • 全てのロジックがプレゼンテーション層に記載されるためコードの 複雑性も上昇
13 04 アプリケーション層を 一部画面に復活させる
14 04 アプリケーション層を一部画面に復活させる • プレゼンテーション層にView以外のロジックが入り込んでしまい、 複数のロジックが集中することで複雑性が上がってしまった • 一部だけUseCaseを復活させることで一部画面で発生した、アプリ ケーションロジックを分離し責務を分けることで、肥大化を避けた
15 05 まとめ
16 05 まとめ • ドメインロジックが無い場合はDomainModelは不要 ◦ アプリの場合は主な関心事がプレゼンテーション層のため、プレゼン テーション層以外はざっくりModelと表現されることが多い • 画面ごとに設計を変えることで過不足ない実装にすることができる
◦ アプリケーションロジックが必要な場合だけUseCaseを作成 ◦ ドメインロジックが必要な場合だけDomainModelを画面単位で導入 • アーキテクチャの軽量化を行うことで設計の複雑性を下げることができる ◦ 軽量化しすぎるとコードの複雑性が上がってしまうので注意
17 よかったらダウンロードしてみてください