RXの芞術

問題、友達。 反応性はどこにでもあり、倚すぎお誰もそれから隠すこずはできたせん。 私たちは皆、ASyncTask、Service、たたはContentProviderを曞くこずができたす私はそれを信じおいたす。 ビットマップたたはドラむブをデヌタ甚にサヌバヌに向けるこずができたす。 これは非垞に明癜です。 しかし、反応䞻矩を適切に調理できるず考えおいたす。 これは垞にそうではありたせん。



Androidでの適切なリアクティブプログラミングずは䜕ですか



画像



-こんにちは。 あなた自身に぀いおいく぀か話しおください。 あなたはどこで働いおいたすかリアクティブなアプロヌチを促進し始めたずき、あなたは䜕をしたすか



-こんにちは。 私の名前は、Mtvey Malkov  lNevermoreのハブ です。 私はおそらく5〜6幎間Android開発者です。 珟圚、私は1぀のスタヌトアップでScala開発に埓事しおいたす。 スタヌトアップはモスクワにあり、私はそれに぀いおあたり話すこずができたせん。 しかし、肝心なのは、Telegramのようなコミュニティプラットフォヌムになるずいうこずです。 実際、私はScalaのAndroidで曞いおいたす。



私がRxJavaに完党に翻蚳した最初のプロゞェクトは、2GISでの仕事でした。 アヌキテクチャ、ベヌス、ネットワヌキング-それだけです。 その埌、圌は䌚議で䞀般的にRxJavaフレヌムワヌクず事埌アプロヌチを積極的に掚進し始めたした。 今、私はScalaで執筆しおいたす。そこでは、MightずMainで機胜的なアプロヌチを䜿甚しおおり、暇なずきにゞェットの䞖界のニュヌスに興味を持っおいたす。



-Habrahabrのナヌザヌは、おそらくリアクティブプログラミングの抂念を知っおいるでしょう。 Androidでのこのパラダむムの機胜ずリアクティブデヌタストリヌムに぀いお教えおください。



-Android向けのプログラミングには、リアクティブプログラミングに関連する機胜がかなりありたす。 あずで説明するリアクティブプログラミングのすべおの原則がAndroidに圓おはたるわけではないこずを䌝えたいだけです。 根拠がないようにするためにスケヌラビリティのようなものがありたす。これは通垞、倚数のノヌドに察するスケヌラビリティずしお理解されたす。぀たり、ある皮のサヌバヌスケヌラビリティです。 Androidでは、これはスレッドの単なるスケヌラビリティであり、「実際のスケヌラビリティ」ではありたせん。 たた、システム党䜓に倧きな圱響を䞎えるこずはありたせん。 もちろん、それはただ䞎えたすが、別の方法で。



もう1぀の特城は、倚くのAndroidが呜什䞻矩に結び぀いおいるこずです。 ぀たり、可倉性、デヌタのボラティリティ、特にそのために、これらすべおをリアクティブフロヌでラップするこずは非垞に困難です。 これは、倚くのハックを行う必芁があるずいう事実に぀ながり、事態を非垞に耇雑にしたす。 Androidの呜什性により、倚くの開発者は、リアクティブで呜什的な䞖界を融合するために実際に考案され䜜成された䞻題などを䜿甚するこずを䜙儀なくされおいたす。 しかし実際には、誰もがObservableに簡単にラップするためにそれを䜿甚しおいたすが、これは倧芏暡なプロゞェクトで、特に長距離にわたっお、アヌキテクチャに悪圱響を及がしたす。 それは、垝囜䞻矩のミッシュマッシュであり、それに察しおずにかく反応䞻矩が行われたように芋えたす。 すべおの理由は、倚くの人が怠けすぎお正しく実行できないか、正しく実行する方法がわからないためです。



実際、これは基本的にすべおです。正しいAndroidアヌキテクチャでは、ネットワヌクむンタラクション、キャッシング、および䞀般的にすべおの䞀般的なビゞネスロゞックをAndroidパヌツに結び付けおはならないためです。 したがっお、実際には、これは他のプロゞェクトず同様に機胜する単なるビゞネスロゞックです。 アンドロむドだけではありたせん。



-リアクティブプログラミングの䞻な原則フォヌルトトレランス、応答性、むベントの方向性、スケヌリングの可胜性はかなり前に策定されたした。 珟圚、これらの原則にどの皋床同意しおいたすか



-実際にリアクティブプログラミングのむデオロギヌの基瀎であるリアクティブマニフェストの原則に぀いお話す堎合、Habrahabrに関する私の蚘事でこれら5぀のすべおの原則を詳しく説明し、Android開発に投圱したした。 そしお確かにそうです、私はただ圌らに同意したす。 これがバックボヌンであり、これらは基本原則であり、リアクティブアプロヌチを䜿甚しお開発するずきに期埅すべき䞻な圱響であり、これらはリアクティブ䞻矩を䜿甚するずきに戊わなければならない䞻なものです。



フォヌルトトレランスを採甚する堎合は、垞にそれに぀いお考える必芁がありたす。 ずおも簡単ですが、垞に念頭に眮いおおく必芁がありたす。 ゚ラヌを正しく凊理し、すべおのケヌスを凊理しお確認したかどうかを自問しおください。 反応性はこれに䟿利なデバむスを提䟛したすが、それに぀いおはただ考えおおく必芁がありたす。 そしお、これらすべおの原則に埓うこずで、非垞に優れたアヌキテクチャず非垞に優れたアプリケヌションを構築できたす。 たた、スケヌラビリティに぀いお述べたように、Androidでは、スレッドに投圱されない限り、いかなる圱響も䞎えたせん。



-より重芁なのは、リ゜ヌスの集䞭床たたは信頌性ですか 結局のずころ、Androidでのスレッドの発行には制限がありたす。アプリケヌションがリ゜ヌスをより芁求するようになったずいう理由だけで、予算のデバむスを船倖に攟り投げるこずができたす:)



-もちろん、そしおもちろん、信頌性ははるかに重芁です。なぜなら、珟圚、Androidの䞖界では、倚くのデバむスが安䟡なセグメントにあるずいう傟向があるからです。 むンドではAndroid Oneが発売され、アメリカでは数ドルで電話が販売されおいたす。 ぀たり、Nexus 6Pず同様に動䜜しない、非垞に安䟡で超安䟡なAndroidスマヌトフォンがありたした。 そのようなスマヌトフォンの所有者はたすたす増えおおり、すべおを片付けるこずはできたせん。



ただし、もちろん、リ゜ヌスの集䞭床も忘れるこずはできたせん。 これは二次的なものではなく、これらの2぀の原則は互いに䞊行する必芁がありたす。 同じreactivschinaで、デバむスに応じお、コアの数に応じお、操䜜甚に異なるスレッド数を蚭定できたす。 ぀たり、予算のあるデバむスでは䜕かがより遅く機胜するようにしたすが、正確に機胜し、明確に機胜したす。 もっず時間がかかりたすが、それでも。 これらの間でバランスを芋぀けるこずは䟡倀がありたすが、䞡方に泚意を払う必芁がありたす



「テクノロゞヌずフレヌムワヌクに関しおかなり保守的だず蚀っおいたした。」 RxJavaフレヌムワヌクずその長所ず短所に぀いお教えおください。



-Framework-driven-developmentのようなものがありたす。 これは病気です。そもそもフロント゚ンドでしょう。 そしお、Androidの䞖界党䜓。 あなたが問題を迅速に解決できないこずを想像しおください。もちろん、あなたは考えるのが面倒であり、未知のむンド人によっお曞かれたある皮のフレヌムワヌクを芋぀けようずしおいるず想像しおください。 このフレヌムワヌクにはバヌゞョン1.0.0たたは1.0.1がありたす。぀たり、圌は䞀床だけパッチを適甚し、玄3幎前にそれを䜜成したした。 そしお圌はどういうわけかあなたのニヌズを満たしおいたす。 ラむブラリは拡匵可胜ではなく、クラッシュする可胜性がありたすが、䜕らかの圢で動䜜したす。 これは非垞に䞀般的であり、人々は垞にそのようなフレヌムワヌクをプロゞェクトに取り入れおいたす。 私はこれを行うこずができないず信じおおり、したがっお、私はこの点でかなり保守的であるず随所に曞いおいたす。



RxJavaフレヌムワヌクはどうですか 近くにすでに匷力なコミュニティが存圚するこずは非垞にクヌルであり、倚くの堎合、それ自䜓を修正し、バグは垞に修正されたす。 RxJava代入が異なる方向に進むのはクヌルです。 Androidにずっお非垞に重芁ないく぀かのむベントを迅速に凊理するこずを目指しおおり、RxJavaがサヌバヌ偎で適切に機胜するこずを保蚌するように機胜したす。 たずえば、バックプレッシャヌ凊理はすでに远加されおおり、これはバック゚ンドのものです。 以前は、on-backpressure-bufferずon-backpressure-dropしかありたせんでしたが、これらのすべおのバックプレッシャヌをカスタム凊理できるようになりたした。 最新のAndroidでは、負荷の高いシステムだけでなく、これにも察凊する必芁がありたす。 特に、システムがreactivschinaで構築されおいる堎合、倚数のスレッドがあり、1぀は非垞に高速にデヌタを曞き蟌み、もう1぀はゆっくりずデヌタを読み取りもちろんノルりェヌ語のリヌダヌ、その埌ハンドラヌはチョヌクを開始したす。 たた、これも凊理する必芁がありたすが、通垞、Android開発者はバックプレッシャヌが䜕であるかをあたり認識しおおらず、これらの蚀葉を聞いお非垞に驚いおいたす。 これは重芁であり、Android開発のプロセスで知る必芁がありたす。



もちろん、RxJavaにも欠点がありたす。 実際、Androidに぀いお話しおいる堎合、これはたったく異なるアプロヌチであるずいうこずです。 これたで、このOSでは呜什型アプロヌチがより倚く䜿甚され、RxJavaはより機胜的です。 たた、RxJavaを正しく「調理」する方法を知っおいる人はほずんどいたせん。 私自身でさえ、RxJavaのすべおの抂念を非垞に正確に理解しおいるわけではありたせん。 しかし、私の防埡では、実際的なレベルでさえ、誰もがこのフレヌムワヌクを理解しおいるわけではないず蚀うこずができたす。 :)



たた、明らかな欠点ずしお、オブゞェクトのコピヌが倚数あるこずに泚意する必芁がありたす。 これがもたらすこずは理解できたす。 これはGCの远加の負担です。



-RxJava察Bolts2぀の基本的な違いは あなたの個人的な奜み、そしお具䜓的なアプロヌチそれぞれの可胜性は䜕ですか



-私は実質的にボルトを䜿甚しおいたせんでした。ずおもきれいに突くようにしたした。 RxJavaの構文は、よりネむティブで簡朔に思えたす。 圌女は栌奜良く、ずおも快適に芋えたす。 しかし、同時に、Boltsは事埌察応的なアプロヌチの芳点でより深いです。 非同期ず埅機だけで配信したす。ちなみに、これらは「通垞の」RxJavaにはありたせん。 ボルトは、私には䜎レベルであり、基本的なものに近いようです。



その可胜性は明確で巚倧です。 どちらのラむブラリも、開発に倧きな圱響を䞎えたした。 Boltsはただあたり䜿甚されおいないため、RxJavaは、私が知る限り、より倧きな圱響を䞎えおいたす。 どのラむブラリを䜿甚するかは誰もが遞択できたすが、RxJavaの方が構文ず理解の点でシンプルであるように思えたす。



-2GIS、Soundcloud、Facebookなどのトップデベロッパヌの最新のアプリケヌションをどのように評䟡したすかたた、パラダむムぞのアプロヌチの違いは䜕ですか



-これらはたったく異なるアプリケヌションであり、それらは異なるものに関するものであるずいう事実から始たりたす。 地理䜍眮情報ず地図に関する2GIS、音楜に関するSoundcloud、および瀟䌚的なこずに関するFacebook。 それらは完党に異なる技術で曞かれおいるため、興味深い遞択がされおいたす。 2GISはQt 5 + QMLで蚘述され、SoundcloudはRxJava反応性を䜿甚するJavaアプリケヌションであり、FacebookはReactive Nativeで蚘述されおいたす。 少なくずもこれにはすでに根本的な違いがありたす。 さらに、ナヌザヌずの関係にも違いがありたす。



぀たり、たずえば、Facebookはすべおのガむドラむンに準拠しおおらず、Facebookのメッセンゞャヌにはポップアップやオヌバヌレむなどがありたす。 チャットをするず、デスクトップ䞊でチャット盞手の顔が芋えたす。 そしお、それをクリックするこずにより、珟圚画面䞊にあるすべおのものに重なるアプリケヌションが開きたす。 これを行うのはあたり適切ではなく、個人的に私を悩たす。



Soundcloudは、倚くの暙準ナヌザヌむンタヌフェむスマテリアルを取り入れようずしたすが、それでも非垞に矎しいものです。 音楜の再生䞭に実行される圌らのトラックはすべお、フロント゚ンドだけを開発するのは非垞にクヌルで困難です。



2GISは2GISです。 ちなみに、「doubleGIS」ではなく「dvigis」ず発音するのは正しくないこずをご存じですか今ではご存知です:)独自のロックがあり、QMLがあり、特に暙準のAndroidりィゞェットを䜿甚できないようです。 肝心な点は、暙準的な材料蚭蚈にも埓おうずするこずですが、垞に成功するずは限りたせん。



SoundcloudやTelegramなど、非垞に高速に動䜜するアプリケヌションが本圓に奜きです。 それらを評䟡する方法がわかりたせん。 アプリケヌションは安定しおうたく機胜したす。誰かがデザむンを気に入っおも、他のデザむンは気に入らないかもしれたせん。 そしお、それらはすべお異なるパラダむムを持っおいたす。



-モバむル開発Elm以倖の領域でのリアクティブプログラミングずアプリケヌションの動的開発をどのように評䟡したすか



-゚ルムに぀いおは䜕も蚀うこずができたせん。 私が芋るように、リアクティブプログラミング自䜓は勢いを増しおいたす。 サヌバヌ偎で非垞に優れたニッチを芋぀けたため、倚くの䌁業がサヌバヌ偎でそれを䜿甚しおいるため、高負荷で機胜する拡匵性の高いサヌビスを䜜成できたす。 BigDataでは、Akka StreamsやRxJavaなども簡単に確認できたす。 これは、RxJavaでほが完党に蚘述されたNetflixのような「クヌル」なロヌド、分散、およびなんらかのサヌビスです。



フロント゚ンドに関しおは、私は実際にりェブのトレンドをフォロヌしおいたせん。 しかし、私は圌らがClojureScriptでたくさん曞いおいるこず、RxJSがあるこずを知っおいたす。RxJSもそのニッチを芋぀けたようです。 䞻なこずは、このすべおがさらに進歩し発展するこずです。なぜなら、反応䞻矩は倚くの堎所で圹に立ち、アプロヌチ党䜓がニッチに陥るずif蟱されるからです。



- メビりス2016カンファレンスでのThe Art of Rxに぀いおの講挔は䜕ですか



-報告は、反応䞻矩がどこに向かっおいるのか、そしお実際にそれを正しく準備する方法に぀いお、かなり哲孊的であるように蚈画されおいたす。 このアプロヌチを䜿甚したアプリケヌションアヌキテクチャの構築に関連するいく぀かの偎面を怜蚎したす。 この蚀語は、「アヌキテクチャ」ず「プログラミング」ずいう蚀葉を組み合わせるこずにはなりたせん。 奇劙なこずに、倚くの人がこれらの間違いを犯したす どうやっお芋぀けたの はい、ずおも簡単です あらゆる皮類のフォヌラムでよく芋かけたす。 なんで はい、人々は反応䞻矩自䜓で䜕床も間違ったこずをするので、これをすべお維持するこずは非垞に難しくなり、反応的なアプロヌチの党䜓的なアむデアは厩れおいるようです。 さお、レポヌトでは、RxJava自䜓の内郚のいく぀かのアヌキテクチャのこずを考慮しようずしたす。 ぀たり、同じフラットマップが実際にどのように機胜するか、Zipに関連する興味深いこずを瀺したす。たた、たずえば、ObservableからObservableを䜜成する方法など、いく぀かの内郚的なものに觊れたす。 䞀般的に、私はかなり興味深い䜜品を準備したした:)。



倚くの人はおそらくそれに぀いお考えたこずすらなかったでしょうし、私はそれが興味深く有益なものになるような方法ですべおを提瀺しようずしたす。 最も重芁なこずは有益です。








䟿利なリンク




All Articles