2019/09/02 (Mon) に実施された「KidsStar 開発合宿」で発表した UniFlow というライブラリの解説資料です。
גࣜձࣾΩοζελʔ$50ɹ࠸6OJ'MPXશʹཧղͨ͠ .PO,JET4UBS։ൃ߹॓*DBOEFWFMPQ6OJ'MPXBMJUUMF
View Slide
͜Μʹͪʂ
w6OJ'MPXͷ֓ཁw6OJ'MPXͷ͍ํw6OJ'MPXͷ֦ுΞδΣϯμηογϣϯ֓ཁ
w$"'6ͬͯͯɺʮ1SFTFOUBUJPOʹԙ͚Δ ΠϕϯτͷऔΓճ͕͠໘ष͍ͳ͊ʯͬͯײͯ͡ΔਓwʮϘλϯͷ֦ॖΞχϝͪʯͱ͔ʮೋԡ͠ରࡦʯͱ͔ ຖճॻ͔ͳ͖Ό͍͚ͳ͍͚ͲநԽ͠ਏ͍ॲཧΛڞ௨Խ ͍ͨ͠ͱࢥ͍ͬͯΔਓwνϡʔτϦΞϧͱ͔ͷʮͪΐͬͱϢʔβΠϯλϥΫγϣϯ ඞཁͳΜ͚ͩͲɺجຊࣗಈ࠶ੜʯΈ͍ͨͳॲཧΛ ίʔυॻ͔ͣʹ࣮ݱ͍ͨ͠ਓw͍ͬͯ͏͔,JET4UBSؔऀͰ6OJUZ৮Δਓࠓͷରऀηογϣϯ֓ཁ
w6OJ'MPXʹ͍ͭͯࠓ͢ίτηογϣϯ֓ཁ
w6*&MFNFOUTʹ͍ͭͯw(SBQI7JFXʹ͍ͭͯࠓ͞ͳ͍ίτηογϣϯ֓ཁ
ηΫγϣϯλΠτϧwࣄגࣜձࣾΩοζελʔ$50wՈ࠺ɾ່w6OJUZྺw!NPOSZwBLBΜΓ͌ઌੜ7ࣗݾհηογϣϯ֓ཁ
ࣗݾհ"XBSEηογϣϯ֓ཁw.JDSPTPGU.71 GPS%FWFMPQFS5FDIOPMPHJFTw6OJUZ"NCBTTBEPS
ࣗݾհ+PCηογϣϯ֓ཁະबֶࣇʙখֶߍֶ͚ͷ৬ۀମݧΞϓϦʮͬ͜͝ϥϯυʯΛҎ্ʹΘͨΓ։ൃɾӡӦ
ηΫγϣϯλΠτϧwΩοζελʔֶशா 1JYJW#005)ʹͯ ධൢചதʂw"TTFU#VOEMFw։ൃൿwւ֎ۈͷ͓͠wษڧձ։࠵w"OESPJEࣗಈςετw7FDUPS(SBQIJDT10ࣗݾհ13IUUQTLJETTUBSUCGCPPUIQNηογϣϯ֓ཁ
ࣗݾհ13ηογϣϯ֓ཁ#ͷϥδ ύʔιφϦςΟͬͯ·͢ʂήετืूதʂ
w6OJ'MPXͷ֓ཁw6OJ'MPXͷ͍ํw6OJ'MPXͷ֦ுΞδΣϯμΠϚίί
4VNNBSZPG6OJ'MPX
ίϯηϓτ6OJ'MPXͷ֓ཁ%FWFMPQNFOU 1SFTFOUBUJPO-BZFSTXJUIPVU$PEJOH
ίϯηϓτ6OJ'MPXͷ֓ཁwϧʔϧΛ౷Ұw֤छΠϕϯτͷϝοηʔδϯάwॲཧͷݺͼग़͠w֦ுੑߴ͘wฤू͠қ͘
8IBUEPFT6OJ'MPXEP6OJ'MPXͷ֓ཁw6OJUZͷੈքͰൃੜ͢Δ֤छॲཧΛ ଓ͢ΔύΠϓϥΠϯͱͯ͠ػೳwྲྀΕ͖ͯͨॲཧΛϝοηʔδͱͯ͠ ϏδωεϩδοΫʹड͚͢
ߏཁૉ6OJ'MPXͷ֓ཁw$POOFDUBCMFw$POOFDUPSw3FDFJWFSw&WFOU.FTTBHFTw6OJ'MPX(SBQI
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFS
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFS6OJUZͷ֤छॲཧΛଓ͕ࣗॲཧͷى ඌʹͳΓ͏ΔConnectorBaseΛܧঝ
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFSʮλοϓ࣌ʯʮԻऴྃ࣌ʯʮ5JNFMJOFऴྃ࣌ʯ ͱ͔ͷΠϕϯτൃՐ࣌ʹ ޙଓͷ$POOFDUBCMF ʹଓ
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFSʮԻ࠶ੜʯʮΞχϝ࠶ੜʯ ʮ5JNFMJOFఀࢭʯ ͱ͍ͬͨॲཧΛݺͼग़ͯ͠ ޙଓͷ$POOFDUBCMF ʹଓ
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFSʮ5JNFSʯʮ*OUFSWBMʯ ʮ'JMUFS ະ࣮ʯ ͳͲͷཧతͳॲཧΛ࣮ߦ͠ ޙଓͷ$POOFDUBCMF ʹଓ
ߏཁૉ$POOFDUBCMF6OJ'MPXͷ֓ཁw$POOFDUPSw&WFOUw$POUSPMMFSw-PHJDw3FDFJWFSྲྀΕ͖ͯͨϝοηʔδΛड͚औͬͯʮԿ͔ʯ͢ΔࠓͷॴҎԼ͕ར༻ՄೳwԿ͠ͳ͍wϩάग़ྗ͢ΔwIObservable.OnNext()
ߏཁૉ&WFOU.FTTBHFT6OJ'MPXͷ֓ཁwܦ༝͖ͯͨ͠$POOFDUBCMFͷ ใ͕֨ೲ͞ΕΔwIReceiver.OnReceive(EventMessages eventMessages)w·͊ɺ͏ίτগͳ͍ͱࢥ͏
ߏཁૉ6OJ'MPX(SBQI6OJ'MPXͷ֓ཁ
ߏཁૉ6OJ'MPX(SBQI6OJ'MPXͷ֓ཁ͕Μͬͨ
ߏཁૉ6OJ'MPX(SBQI6OJ'MPXͷ֓ཁw4DFOF1SFGBCʹؚ·ΕΔ $POOFDUBCMFͷใΛҰཡwͦͷͰ৽͍͠$POOFDUBCMFΛ Ճ͢ΔͳͲͷฤू࡞ۀ0,wৄ͘͠ޙड़
)PXUPVTF6OJ'MPX
%FNP6OJ'MPXͷ͍ํ-JWF%FNP
&YUFOE6OJ'MPX
$POOFDUPSՃ6OJ'MPXͷ֦ுwछผΛΘͣConnectorBaseΛܧঝ͠·͠ΐ͏w[AddComponentMenu]ΛΕͣʹw6OJ'MPX(SBQI͔Βࢀর͞Ε·͢wϝχϡʔ໊"UniFlow//"ͱ ͠·͠ΐ͏wFH[AddComponentMenu("UniFlow/Event/FooBarEvent")]
3FDFJWFSՃ6OJ'MPXͷ֦ுwReceiverBaseΛܧঝ͠·͠ΐ͏w$"'6͔Β͏߹ObservableReceiverBase͕ศརwpublic interface IFoo : IObservableReceiverwpublic class Foo : ObservableReceiverBase, IFoow[Inject] private IFoo Foo { get; }
6OJ'MPX(SBQIʁ6OJ'MPXͷ֦ுwConnectableBaseΛܧঝͨ͠ Ϋϥεࣗಈతʹ(SBQI/PEFͷ ରʹͳΔw"EE/PEFͷ5SFFAddComponentMenuଐੑͷ ύϥϝʔλΛಡΜͰߏங
5IBOLZPVGPSZPVSBUUFOUJPO