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
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
Search
soi013
December 26, 2024
Programming
0
350
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
December 26, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
230
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
540
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
180
Compose UIテストを使った統合テスト
hiroaki404
0
120
ATDDで素早く安定した デリバリを実現しよう!
tonnsama
1
1k
CloudflareStack でRAGに入門
asahiiwm
0
140
情報漏洩させないための設計
kubotak
5
1.2k
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
860
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
490
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
720
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
630
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
210
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Practical Orchestrator
shlominoach
186
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
340
How GitHub (no longer) Works
holman
312
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Music & Morning Musume
bryan
46
6.3k
Transcript
ΦχΦϯΞʔΩςΫνϟΛͬͯɺ 6OJUZͱ/&5ͰίʔυΛڞ༗͢Δ TPJ ΞυϕϯτΧϨϯμʔ͓ർΕ༷ձ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 2 લॻ͖ 6OJUZͱ/&5 w 6OJUZ w 6OJUZࣾήʔϜΤϯδϯ w
ରNPCJMFʗ4UFBNʗ73 w /&5 w .JDSPTPGUࣾιϑτΣΞϓϥοτϑΥʔϜ w ର%FTLUPQʗ8FC どっちも $ で ॻ く
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 3 ΞϓϦ ͜ΜͳΞϓϦΛ࡞Γ·ͨ͠ 6OJUZ と /&5 コンソールアプリの ྆ํ
の プラ ッ トフ ォ ームで 50%0 ア プ リを ࡞ Unity アプリ コンソール アプリ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 4 ΞϓϦ ϢʔβʔΛ͔͞ͳ͍ݫ͠ͷ50%0ΞϓϦ (ア ドベ ントカレン ダーの క
め り ؒ に ߹ わなくて ਃ し ༁ あり ませ ん ɻ ) wඞͣҰఆ࣌ؒͰظݶΕʹ͢Δ wҰظݶΕʹͳͬͨΒɺྃʹͰ͖ͳ͍ wˠ50%0ܾΊͨΒɺ͙͢Εʂ+645%0*5ʂ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 5 ղઆ ΦχΦϯΞʔΩςΫνϟ w υϝΠϯத৺ઃܭ ΞϓϦέʔγϣϯͷϏδω εϧʔϧΛத৺ʹઃܭ w
ґଘੑͷํ ֎ଆͷϨΠϠʔ͕ଆͷϨΠϠ ʔʹґଘ͢Δ͕ɺٯͳ͍ w ςετ༰қੑ υϝΠϯ͕ଞͷϨΠϠʔ͔Β ಠཱ͍ͯ͠ΔͨΊɺϢχοτςετ͕༰қʹͳ Δ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 6 ղઆ ΦχΦϯΞʔΩςΫνϟ wυϝΠϯ5PEPΤϯςΟςΟ50%0ͷ੍ ݶϧʔϧ wϢʔεέʔε50%0ϦετͷՃɾআɾҰ ཡऔಘͷϢʔεέʔε w6*ϢʔβʔΠϯλʔϑΣʔε෦
w ͜͜ϓϥοτϑΥʔϜݻ༗ʹͳΔͷͰɺ 6OJUZͱ/&5Ͱݸผʹ࣮ /LifeTodoConsole /Domain - Todo.cs /UseCase - TodoAppService.cs /ConsoleApp - Program.cs /Test - Todo_Test.cs /LifeTodoUnity /Assets/Scripts /UI - TodoAddView.cs
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 7 ղઆ υϝΠϯ wϏδωεϩδοΫΛදݱ wDo() ϝιουͰ ʮҰظݶΕʹͳͬͨ50%0 ྃʹͰ͖ͳ͍ʯ
ͱ͍͏ϧʔϧΛදݱ public class Todo { public TodoId Id { get; init; } public string Text { get; init; } public TodoStatus Status { get; private set; } . . . public void Do() { if (Status = = TodoStatus.Active) { Status = TodoStatus.Done; } } . . . }
public class TodoAppService { . . . public void AddTodo(string?
todoTextNew) { var todoNew = new Todo(todoTextNew!); todos.Add(todoNew); } . . . $PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 8 ղઆ Ϣʔεέʔε wΞϓϦέʔγϣϯͱͯ͠ΓཱͨͤΔ ͨΊʹඞཁͳϢʔεέʔε wAddTodo()ϝιουͰ ʮ༰Λࢦఆͯ͠50%0ΛՃ͢Δʯ ͱ͍͏ϢʔεέʔεΛ࣮ݱ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 9 ղઆ 6*ίϯιʔϧΞϓϦ w6*ϓϥοτϑΥʔϜ͝ͱʹҟ ͳΔ wίϯιʔϧΞϓϦͰ Program.csʹॻ͘ wίʔϯιʔϧ͔Βจࣈ͕ೖྗ͞Ε
ͨΒɺϢʔεέʔεͷ50%0 ՃΛ࣮ߦ͢Δ class Program { . . . Console.Write("> "); string? todoTextNew = Console.ReadLine(); appService.AddTodo(todoTextNew); . . . }
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 10 ղઆ 6*6OJUZΞϓϦ w6*ϓϥοτϑΥʔϜ͝ͱʹҟ ͳΔ w6OJUZΞϓϦͰෳͷ MonoBehaviourܧঝͨ͠εΫϦ ϓτΛ༻
wbutton͕ԡ͞ΕͨΒɺtitle ͔ΒจࣈΛऔಘͯ͠ɺϢʔεέʔ εͷ50%0ՃΛ࣮ߦ͢Δ public class TodoAddView : MonoBehaviour { [SerializeField] private Button button; [SerializeField] private TMP_Text title; . . . private void Start() { button.onClick.AddListener(OnAdd); } private void OnAdd() { appService.AddTodo(title.text); title.text = string.Empty; } }
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 11 ղઆ コード共通化の 方 法 w ࠓճ/&5ίϯιʔϧΞϓϦʹڞ௨෦ΛؚΊͨ w
֤ͷ%--͕ੜ w %--Λ6OJUZ͔Βࢀর w ผͷखஈ͋Γ w OVHFU৴ w ιϦϡʔγϣϯ͝ͱಉډ w HJUTVCNPEVMF
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 12 ϝϦοτ 6OJUZͷґଘͷݮগ w 6OJUZͷґଘΛݮ w 7JFXҎ֎Ͱ6OJUZʹґଘ͠ͳ͘ͳΔ w
ଞϓϥοτϑΥʔϜͷҠ২͕༰қʹ w ςετ͕؆୯ʹ w EPOFUUFTUͰ୯ମςετ͕Մೳ w ୯ମςετ͕࣌ؒେ෯վળ w 6OJUZ࣮ߦڥ͕ͳͯ͘ಈ࡞֬ೝ͕Մೳ
$PQZSJHIU+0--:(00%*OD"MM3JHIUT3FTFSWFE $0/'*%&/5*"- 13 ·ͱΊ オニ オ ンアーキテクチ ャを って
ɺ6OJUZ と /&5 で コ ードを ڞ༗ する 6OJUZ։ൃ でも /&5 を ར༻ す ると ศར です よ w ΦχΦϯΞʔΩςΫνϟΛͬͯ6*෦ΛΓͤΔ w 6*Ҏ֎/&5ͱ6OJUZͰίʔυΛڞ༗Ͱ͖Δ w /&5Ͱ୯ମςετಈ࡞֬ೝ͕Ͱ͖Δͱ։ൃ͕രʹͳΔ