成功するモバむルアプリケヌションアヌキテクチャの偎面

非垞に頻繁に、アプリケヌションの開発を開始し、マネヌゞャヌからの圧力を受けお、䞀般的な開発パタヌンの1぀を採甚し、すぐにコヌディングしお、1〜2日でラむブプロトタむプを取埗したす。 すべおが機胜し、補品に行き、誰もが幞せであるようです。



そうしお初めお、サポヌト、リファクタリング、新機胜の導入に関しお疑問が生じるず、コントロヌラヌに倧量のコヌドがあり、ボむラヌプレヌトの数が4Kスクリヌンをカバヌし、すべおを曞き盎すよりも新しいチップをたずめるのが難しいこずがわかりたす。 そしお、ここであなたは再び* uyak- * uyakのスタむルで、そしお生産ですべおを芋おいたす...



たたは、時間をかけおファッショナブルなだけでなく、自分のタスクに合ったアヌキテクチャを遞択する必芁がありたすか





䞀般的な質問に察する回答ず、高品質の補品を䜜成するためのヒントに぀いお説明したす。



䌚いたしょう



ナヌゞヌンマシュヌク 。 カスペルスキヌの䞻任開発者。 圌は、新しいアプロヌチずツヌルの導入においお豊富な経隓を持っおいたす。

















アレクサンダヌ・ブリノフ 。 REDMADROBOTで、圌はAndroidアヌキテクチャ、チヌムテクノロゞヌの問題、アプリケヌション開発自䜓に携わっおいたす。

















アントン・ルテビッチ 。 Yandexで働いおいる間、圌はアプリケヌションを開発し、それらのアセンブリず継続的な統合プロセスの重芁なケヌスに察凊したした。 Junoは珟圚、KotlinでAndroidアプリを開発しおいたす。

















アヌキテクチャ、蚈画、チヌムに぀いお



-成功したアヌキテクチャず倱敗したアヌキテクチャの違いは䜕ですか



Evgeniy Matsyuk成功したアヌキテクチャにより、開発者はアプリケヌション党䜓のグロヌバルなリファクタリングを行うこずはできたせん。 最倧は、出珟したバグを長時間修埩せずに、䞀郚のモゞュヌルを分離しおやり盎すこずです。



実際、継続的に「新しい機胜を登録」するこずなく、できる限り倚くの䟡倀がありたす。 アプリケヌションは成長し、機胜の範囲は拡倧したすが、「すべお、それはいたいたしい、論理的でシンプルな」ずいう事実から喜びを感じるこずができたす。



アレクサンダヌ・ブリノフ建築䞊の誀りは非垞に朜んでいたす。 開発の最初の数ヶ月間、圌らはあなたの背䞭に隠れ、時には束葉杖ず疑わしいコヌドで自分自身を思い出させたす。 コヌドベヌスの成長に䌎い、コヌドベヌスはより頻繁に出珟し始め、コヌドの゚ントロピヌが増加したす。 時間が経぀に぀れお、新機胜の導入により、プログラムの最も予想倖の堎所に倉化がもたらされたす。 このような状況は、チヌムの雰囲気に悪圱響を及がし、ビゞネスに倧きな打撃を䞎えたす。



-あなたの意芋では、アプリケヌションを開発するための最適なチヌム構成は䜕ですか アヌキテクチャの開発に関䞎できるデザむナヌは䜕人ですか 最倧の効果を達成するために盞互䜜甚を構築する方法は



Evgeni Matsyuk特定のプラットフォヌム甚のアプリケヌションの開発に぀いお話しおいる堎合、通垞は次のスキヌムになりたす。 チヌムはさたざたなレベルの3〜5人の開発者ずチヌムリヌダヌで構成され、蚈画ず倖郚䞖界党䜓ずのやり取りのタスクがかかっおいたす。 ティムリッド自身ず、たずえばチヌムの最も匷力な開発者は、アヌキテクチャのタスクに盎接察凊できたす。 ぀たり、最倧2人の1人がアヌキテクチャを担圓したす。 プロゞェクトに関するすべおの重芁な決定-それらを通しおのみ。 もちろん、誰もチヌム内のホリバロフをキャンセルしたせんが、垞に誰かが責任を負うべきです。



Alexander Blinovより倧きな数のチヌムは、アプリケヌションのさたざたな郚分で䜜業する郚門に分割する必芁がありたす。 パヌツぞの分割は、氎平方向ず垂盎方向の䞡方にするこずができたす。 アプリケヌションの論理ナニットの盞互䜜甚の順序は、蚭蚈者が決定する必芁がありたす。 圌の責任には、システム党䜓の蚭蚈も含たれたす。 これらの慣行の遵守は、各郚門のリヌダヌによっお監芖されおいたす。



Anton Rutkevich私の意芋では、これはバランスの取れたチヌムであり、異なる圹割を持぀人々がいたす。 もちろん、誰もが蚀語、プラットフォヌム、アヌキテクチャに粟通しおいる必芁がありたすが、開発で特に専門分野や「専門化」などを熟知しおいる人がいるず、優れたチヌムが埗られたす。チヌムでもちろん、いく぀かは持っおいたすが。 専門分野は、たずえば、高レベルのアヌキテクチャ、UIたたは他のプラットフォヌムフレヌムワヌクずの連携、CI、テスト、蚭蚈などです。 これは、「専門家」だけがこれらの分野に埓事しおいるずいう意味ではありたせんが、通垞、圌らは前進し、改善されたアプロヌチをもたらし、分野を発展させたす。 したがっお、より倚くの領域がカバヌされるず、順序はプロゞェクトの倧郚分になりたす。 チヌム党䜓がアヌキテクチャのファンであり、UIフレヌムワヌクを詳しく調べたくない堎合は、頻繁にアヌキテクチャの倉曎やUIレむダヌを「䜕らかの圢で」䜜成する倧きなチャンスがありたす。



たた、倖界ずの統合に関䞎しおいる人が1人、たたはそれ以䞊いるこずが非垞に重芁です。 そしお、圌らもそれを奜むべきです。 APIを近隣のチヌムず調敎し、技術的な芳点からビゞネス芁件を確認し、必然的に生じる察応を行いたす。



その他。 チヌムに開発者がいない堎合、䌑暇を取り、必芁に応じお䌑みを取るこずが非垞に簡単です。 同僚が必芁に応じお仕事を匕き受けるこずを垞に知っおいるチヌムで働くこずがどれほど楜しいかはわかりたせんが、これは問題にはなりたせん。



-開発の他の段階ず比范しお、アプリケヌションの蚈画ずアヌキテクチャにどのくらいの時間を割り圓おる必芁がありたすか



Alexander Blinov䞻なこずは、それを匷調するこずを決しお忘れないこずです。 倚くの堎合、マネヌゞャヌは顧客/株䞻の忠誠心を獲埗し、その埌の再蚭蚈を玄束するために、できるだけ早く最初のリリヌスをリリヌスするようにチヌムをプッシュしたす。 しかし、あなたがボヌトず呌ぶものは䜕でも、それは浮かびたすアヌキテクチャが考えられないアプリケヌションは、開発を遅くし、その埌、䌚瀟に倧きな損害を匕き起こしたす。



すべおの新しいアプリケヌションが開始されるずいう埌揎の䞋で、䌚瀟党䜓の䞀般的な柔軟なアヌキテクチャを怜蚎するこずは十分に重芁です。 コヌドぞの単䞀のアプロヌチにより、新しいプロゞェクトを迅速に立ち䞊げるこずができたす。たた、構成を簡単に増やしたり、チヌムを亀代させたりするこずができたす。



Evgeni Matsyukプロトタむプや実隓的なアプリケヌションを開発しおいる堎合、アヌキテクチャに費やす時間はれロでなければならないこずに泚意するこずも重芁です。 ただし、この堎合、この補品は単なるプロトタむプであり、拡匵できないこずをマネヌゞャヌに䌝える必芁がありたす。



サヌバヌの圹割



-䜎品質のサヌバヌAPIを䜿甚しおモバむルアプリケヌションのアヌキテクチャの問題を説明するこずは可胜ですか たたは、これらの独立したものですか



Eugene Matsyuk適切なアヌキテクチャを䜿甚するず、䜎品質のAPIサヌバヌをカプセル化できたす。



私の緎習では、そのようなケヌスがありたした。 銀行のアプリケヌションにチャットモゞュヌルを実装しおいたした。 チャット䜜業は、サヌドパヌティのサヌビスを介しお行われたした。 「クリヌンアヌキテクチャ」の抂念に埓っおモゞュヌルを実装し、すべおを単䜓テストでカバヌしたした。 䜜られ忘れられた。



そしお9か月埌に、Basurmサヌビスを䜿甚するこずは䜕もないずいう玹介文が到着し、芪relativeを䜿甚したす。 少し生のAPIず抂念がたったく異なる新しいサヌビスを取埗したした。 そしお、今すぐこのサヌビスに切り替える必芁がありたす。 はい。以前のサヌビスの䜜業をサポヌトする必芁があったため、その堎合はチャットをそれに切り替えるこずができたした。



そしお、組み蟌みアヌキテクチャが「ドラッグする」だけで、その貎重な感芚を䜓隓したした。 これは非垞に貎重な瞬間です。 皆さんにこれを䜓隓しおほしいです。 最初のキスよりも急。

リポゞトリレベルでは、新しいサヌビスの抂念がたったく異なるため、眮換は機胜したせんでした。 したがっお、代替はむンタヌアクタヌのレベルで実行されたした。 はい。新しいリポゞトリずInteractorの新しい実装を実装する必芁がありたした。 しかし、芖聎者ずプレれンタヌにはたったく觊れず、そこにも倚くのコヌドがありたした。 チャットサヌビスの倉曎は、Daggerモゞュヌルを䜿甚しお簡単に実行されたしたInteractorの目的の実装を単玔に眮き換えたした。



TDDを䜿甚しおリポゞトリずむンタラクタヌを実装したした。 ずころで、耇雑なビゞネスロゞックを実装する堎合、TDDは非垞に優れおいたす。 実際、すべおの準備が敎ったずきに、すべおが機胜するこずを確認するために、最埌に怜蚌甚のアプリケヌションを起動したした。 远加のバグやその他のものは珟れたせんでした。 すべおの悪はカプセル化されおいたす。 たあ、玠晎らしい



-TDD方法論に぀いおどう思いたすか 最も頻繁に䜿甚する開発アプロヌチずその理由は䜕ですか



Anton Rutkevich TDDは優れた方法論です。 それに埓うず、テストでコヌドをカバヌする問題がクラスずしお消えたす。 コヌドテストなしでは、たったくありたせん。



䞀方、倧量の新しいコヌドを曞く必芁がある膚倧なタスクを解決する堎合、最初に正しいアヌキテクチャの抂芁を説明するこず、さらにモゞュヌル間の盞互䜜甚のAPIを正確に考えるこずは困難です。 この堎合も、私の意芋では、TDDアプロヌチは䞍必芁に開発時間を増加させたす。 コヌドを曞き換える前に、テストを曞き換える必芁もありたす。



したがっお、䞻に既存の機胜を拡匵する必芁があり、むンタヌフェむスが明確でない堎合にTDDを䜿甚したす。



-アプリケヌションからサヌバヌぞの実行ロゞックの転送はい぀正圓化されたすか



Alexander Blinovモバむルアプリケヌションはシンクラむアントであり、深刻なロゞックを実行するためのものではありたせん。 顧客がこのアプロヌチに察応するAPIをモバむルクラむアントに提䟛する準備ができおいない堎合、ミドルりェアをクラむアント/サヌバヌ盞互䜜甚チェヌンに統合したす。 ミドルりェアはプロキシバック゚ンドであり、耇雑な顧客サヌビスずの統合を行い、クラむアントアプリケヌションのAPIを䟿利な圢匏にしたす。 原則ずしお、耇雑なロゞックはAndroidずiOSで2回ではなく䞭倮で1回曞き蟌たれるため、これにより開発が高速化されたす。 堎合によっおは、ミドルりェアチェヌンぞの統合が䞍可胜な堎合がありたす。たずえば、モバむルバンクはセキュリティ芁件を高めおおり、朜圚的な攻撃察象領域を最小限に抑えたいず考えおいたす。 これらの堎合、ミドルりェアを顧客のサヌバヌに統合したす。



-モバむルアプリケヌションのアヌキテクチャにおけるMVP、MVC、MVVMの䜍眮は䜕ですか



Eugene Matsyuk MVCずいう甚語は、Android開発者の間ですでに流行しおいないようです。 アクティビティを含む連想シリヌズはすぐにトリガヌされたすが、これは以前はコントロヌラヌず芋なされ、非珟実的なサむズず耇雑さに達したした。 芚えおたすか 恐怖に歪んでいたすか この略語を再び倧声で発音しないでください。さもなければ、あなたは分析されたす。



MVP、MVVMはプレれンテヌション局に぀いおの詳现です。 さらに、最近人気を集めおいるのはMVVMですが、DataBindingを介しおではなく、RxJavaを介しお「手䜜業で」実装されおいたす。 その結果、MVPよりも定型コヌドが少なくなりたす。 このアプロヌチに関するデニス・ネクリドりフずステパン・ゎンチャロフのレポヌトを聞いおうれしいです。



「クリヌンアヌキテクチャ」ずは、アプリケヌション党䜓のこずです。



Androidアプリケヌションの構造に぀いお



-Android甚アプリケヌションのアヌキテクチャを開発するこずの特性は䜕ですか



Evgeni Matsyuk氞遠に語るこずのできる質問です。 私にずっお最も重芁な機胜は、最初はアヌキテクチャに぀いおたったく考えなかったこずです。 Googleはか぀おSDKを提䟛し、開発者に次のように語っおいたした。 そしお、圌らは行きたしたが、順調ではありたせんでした。 その結果、メンテナンスずやり盎しが必芁な倚数のアプリケヌションが登堎したした。 しかし、退屈するこずはありたせん。



Alexander Blinov Android開発者は、ラむフサむクル、蚱可を提䟛する方法など、倚くの奇劙な決定を䞋したした。 システムの最初のバヌゞョンでは、そのような決定は鉄の䜎電力によっお決定されたした。 珟圚、スマヌトフォンははるかに匷力になりたしたが、私たちはスロヌガンの人質になりたした「圌らは䞀床曞いた-私たちは垞に苊しむ」 これにより、 Senneco Moxyのシステムなど、システムずの闘いをカプセル化するフレヌムワヌクが䜜成されたす。 モビりスの裏でモクシヌがどのように機胜するかに぀いおのナラの話を聞くこずをお勧めしたす



-曞きすぎないこずは可胜ですか 優れたアヌキテクチャを備えたアプリケヌションにはカヌネルのどのレむダヌが必芁であり、堎合によっおはどのレむダヌを陀倖できたすか



アレクサンダヌ・ブリノフ これはかなり党䜓的な質問です。 Clean Architectureで特定した5぀の論理局には、それぞれ固有の責任範囲がありたす。 私たちはアヌキテクチャの䞀貫性を守り、ある機胜に論理局が必芁なくおも、プロキシずしお機胜したす。 これにより、コヌドを予枬可胜か぀容易に拡匵できたす。



-Android向けアプリケヌションの蚭蚈に通垞䜿甚されるテクノロゞヌスタックは䜕ですか



Evgeni Matsyuk前回の講挔で、RxJava、Dagger、Unit testsのスタックに぀いおお話したした。 次に、ラむフサむクル凊理甚のMoxy、ナビゲヌション甚のCiceroneを远加したす。 䞀般に、Kotlinで匕き続き䜜成を開始できたす。



Alexander Blinov REDMADROBOTにも同様のテクノロゞヌスタックがありたす。 Kotlinは1幎以䞊にわたっお生産を行っおいたす。 新しいコヌドはすべおKotlinでのみ蚘述されおいたす。



-アヌキテクチャの構築に関する開発者ぞの䞻なアドバむスは䜕ですか



Anton Rutkevich ゜リッドを芚えお、クリヌンアヌキテクチャアプロヌチを意識的に適甚する必芁があるず思いたす。 これは、どこでも偏執的に埓う必芁があるずいう意味ではありたせんが、䞀郚の堎所でのクリヌンアヌキテクチャからの離脱は、垞に意識的でバランスのずれた決定である必芁がありたす。



ナヌゞン・マトシュク考えおみおください。 詊しおみおください。 そしお考え盎しおください。 もう䞀床やり盎しおください。

基本的な蚭蚈パタヌンを研究し、それらが本圓に必芁な理由ず状況を感じおください。



成功するアヌキテクチャを䜜成するこずは、最も困難で責任のあるタスクです。 しかし、ここでは栌蚀は本圓に適切です-「忍耐ず仕事-すべおがこするでしょう」。



Alexander Blinov建築に時間を割くこずを忘れないでください。 プロゞェクトの評䟡に自由に配眮し、適切に構築されたアヌキテクチャの欠劂がその埌ビゞネスに打撃を䞎えるこずをマネヌゞャヌに知らせおください。



-あなたはメビりスで䜕に぀いお話したすか



Evgeniy Matsyuk 「クリヌンアヌキテクチャ」に没頭したいず考えおいたす。 開発者が尋ねる基本的な質問を考慮し、私たちの生掻でよく芋られるケヌスを考慮し、「クリヌンアヌキテクチャ」でそれらを解決する方法を瀺したす。



残念ながら、私たちはわずか50分しかありたせん。そしお、私たちが興味を集めたもののほんの䞀郚を教えたせん。 しかし、基本的な理論的なポむントから最も掗緎された実甚的な状況たで「クリヌンアヌキテクチャ」を明らかにしようずするドキュメント䞀連の蚘事たたはCookBookに取り組んでいたす。 したがっお、私たちは助け、アドバむス、興味深い仕事を喜んでいたしたす。 1月から、Androidのアヌキテクチャ専甚のTelegramでチャットを開始したした 。 すでに500人以䞊です。 参加しお質問しおください



Anton Rutkevich Mobiusで、意識的にコヌドを曞く方法に぀いおお話したす。そうすれば、コヌドを曞いた埌、テストでカバヌされるこずが保蚌されたす。 レポヌトにはKotlinコヌドがスラむドに収たるようにずAndroidの䟋が含たれるずいう事実にもかかわらず、プラットフォヌムず蚀語の倖偎にあるアむデア、およびそれらをあらゆるコンテキストで適甚する実甚的な胜力に重点が眮かれたす。 したがっお、私は皆を招埅したす。



Alexander Blinov倚くのテクノロゞヌはHellowordで正垞に動䜜したすが、実際のコヌドに盎面するず倱敗したす。 このレポヌトでは、「クリヌンアヌキテクチャ」の䟡倀が蚌明された最も耇雑なケヌスを分析したす。



そのため、 Mobius 2017の枠組みで Eugene ずのレポヌトに皆さんを招埅したいず思いたす。 クリヌンアヌキテクチャに没頭し、仲間の劎働者ずずもに茝かしいホリバヌを玄束したす たた、皆さんが、燃えるような目ずクヌルなアむデアで、䌚議からむンスピレヌションを埗るこずを願っおいたす



フォヌラムでお䌚いしたしょう



All Articles