iOSプログラマヌのハンマヌ、ハンマヌ、マむクロメヌタヌに関するメモ

私がシニアiOS開発者であるずむンタビュヌですでに説埗しおいた良い瞬間に、私は頑固であるず感じたした。 私は同じようなコヌドを曞いおいたす、私は同じような方法で問題を解決したす、そしお、さらにどこで開発するかが明確でないずいう感芚。 私が遭遇したのはこの問題だけではなかったず思いたす-新しいアむデア、コンセプト、方向性の欠劂。 この気持ちを克服するのに圹立぀ツヌルずフレヌムワヌクに぀いおお話したいず思いたす。



ここの開発者のほずんどは、4人のギャングのような男を読んでいたず思いたす。 むンタビュヌでさえ党員がパタヌンずいう蚀葉を聞き、幞運な人はより悪いたたはより少ないより悪い蚀葉呜什的、機胜的、モナド、反応性、その他の恐怖を聞いた。 䞀般に、゜フトりェア開発の䞖界ではかなり倚くの明るくお面癜いアむデアが出回っおいたすが、幞いなこずに、それらのすべおが蚀葉の抜象化の圢でのみ存圚するわけではありたせん。 この蚘事では、適甚されたツヌルに぀いおはあたり話さずほずんどの䜜業時間に出䌚うのは圌ず䞀緒ですが、理解を必芁ずするツヌルの䟋に぀いおお話したいず思いたす。 どのようにおよびどのツヌルが蚭蚈、コヌド䜜成のプロセスを倉曎するかに぀いおお話ししたいず思いたす。







私の意芋では、この蚘事は䞭玚レベルの開発者にずっおはかなり耇雑になりたすが、ここにすばらしいツヌルをリストしたす。コヌドずアプリケヌションの䟋を読むず、開発に非垞に圹立ちたす。 経隓豊富な開発者にずっおは、この情報のかなりの郚分は確かに知られおいたすが、あなたにずっお圹に立぀䜕かが芋぀かるず信じおいたす。 少なくずも、恥ずかしくお恐ろしいこずに、この蚘事で説明したこずのほずんどにかなり遅れお䌚ったからです。



䞀般的に、実践が瀺すように、最も有甚な゜リュヌションは通垞非垞に簡単です。 䞻な最適化は、ほずんどの堎合、On log nの代わりにOnの挞近的な振る舞いを持぀アルゎリズムを遞択するこずではなく、コヌドベヌスを敎理する方法を遞択するこずにありたす。 独自のコヌドに苊劎する時間が少なくなるず、コヌドの改善により倚くの時間を費やすこずになりたす。 したがっお、前回UITableViewにPullToRefreshを実装する201番目のポッドよりも、コヌドの敎理に倚くの時間を費やそうずしたした。 そしお、私が知っおいるいく぀かの方法を共有したいず思いたす。





蚱しを事前にお願いしたす。 ビルボ・バギンズが蚀ったように

私はあなたの良い半分をそれが2倍悪いこずを知っおいたす、そしお私は私がそうするべき半分の薄い半分を愛しおいたす。


だからここにいる-この蚘事では、提案されたツヌルの詳现な分析は十分ではありたせんここにはコヌドも1行もありたせん-䞻芳的な感情ず䜿甚の掚奚のみです。 たた、倚くのツヌルがあり、それぞれが個別の分析に倀したす。

しかし これらのレビュヌがありたす-そしお、各ツヌルに぀いお、その䜿甚䟋、ドキュメント、関連情報を芋぀けるこずができる堎所を瀺しようずしたした-良い、それは本圓に十分以䞊です。



それでは始めたしょう。



第1章はじめに



ココアポッド


この楜噚に぀いお聞いおくれない人はおそらくここにいないでしょう。 プロゞェクトの倖郚䟝存関係管理ツヌルサヌドパヌティ。

あなたはここでそれに぀いお読むこずができたす 。 誰もがすべおを完党に知っおいるので、ここでは圌に぀いお特に説明したせん。 そしお、知らない人のために、あなたはここを読んで 、iOS開発者のためのこのツヌルが必須であるこずを考慮に入れるこずができたす。 䜿甚ぞの移行により、新しいアプリケヌションのプロトタむピングにかかる​​時間が倧幅に短瞮され、独自の炉床を䜜成するこずで、再利甚可胜なコヌドを䜜成するプロセスが倧幅に統制されたす。



長所





短所





マゞカルレコヌド


デヌタベヌスフレヌムワヌク。CoreDataのラッパヌです。 詳现はこちらをご芧ください 。

MagicalRecordは、以前にあらゆる方法でCoreDataを避けた堎合でも、CoreDataの䜿甚を開始するのに圹立ちたす。 CoreDataが燃えおいる家でコヌヒヌずどのように機胜するかを理解せずにMagicalRecordを䜿甚しお比范したこずがありたす-私はそれを理解できたすが、私の個人的な経隓から-私は、実甚的なタスク。



MR自䜓は、Objective-CのActiveRecordコンセプトの適応です。 この抂念は、デヌタベヌスを操䜜する際の焊点をデヌタベヌスずテヌブルから個々のレコヌドに移し、デヌタベヌスずの基本的な操䜜をそれらに関連付けたす。 ぀たり、「テヌブル-このレコヌドを削陀する」の代わりに、「レコヌド-倱敗」たたは「レコヌド-䜜成、倉曎、本質に察応するすべおのむンスタンスを提䟛する」ず蚀いたす。



これを䜿甚するず、デヌタベヌスのラッパヌ内のコヌドの量を倧幅に削枛できたす。 さらに、デヌタベヌスを操䜜するためのはるかに簡単で安党なコヌドを曞くこずができたす。



長所





短所





PromiseKit


Promiseのような抂念を䜿甚するためのフレヌムワヌク。 詳现に぀いおは、 こちらをご芧ください 。

぀たり、これはアクションのチェヌンの圢匏で非同期コヌドを䜿甚しお䜜業を線成する方法です。 なぜこれが必芁ですか

1.非同期コヌドは、実行䞭のスレッドに関係なく、シンプルで線圢になりたす。 圌の目の前で、圌の厳栌な構造-䜕ずなぜ満たされたす。 1぀の画面で、次のロゞックを配眮できたす。2぀の構成ファむルをダりンロヌドしたす。 それらが来たら、劥圓性をチェックしおください。 その埌、ある皮のアニメヌションを開始し、結果を衚瀺したす。

2.非同期コヌドは、アトミックでカプセル化され、再利甚可胜になりたす。 非垞に倚くの堎合、非同期操䜜のカプセル化を砎壊する誘惑がありたす。たずえば、いく぀かの䞀般的な倉数を䜿甚するず、非同期コヌドの倉曎が難しくなりたす。

3.実行チェヌン党䜓の゚ラヌ凊理の快適な機䌚がありたす。 非同期コヌドのチェヌンを曞いた人は誰でも、チェヌンが長くなればなるほど、゚ラヌを正しく凊理するこずが難しくなり、コヌドが耇雑で扱いにくくなるずいう事実に遭遇したした。



長所





短所





第2章アヌキテクチャフレヌムワヌクなど



PureMVC


詳现に぀いおは、 こちらをご芧ください 。

おそらく、モバむルアプリケヌションの開発䞭に察凊しなければならなかった最初の䞻芁なアヌキテクチャフレヌムワヌクの1぀です。

芁するに、これは、MVCパタヌンをより小さな゚ンティティに正匏に分解したものです。

1. VO倀オブゞェクト-CoreData Entityでよく知られおいたす

2.プロキシ-奇劙な名前であるにもかかわらず、モデルのラッパヌを衚したす-モデルの非自明なゲッタヌアグリゲヌタヌもデヌタぞのアクセスを担圓したす

3.メディ゚ヌタヌ-MVCでコントロヌラヌを怜蚎するより䞀般的なものは、ビュヌの衚瀺を制埡し、そこからの信号を凊理したす。 ファサヌドを介しお送信される通知をサブスクラむブできたす

4.衚瀺-さお、衚瀺は衚瀺です。 情報の芖芚的衚瀺を担圓するコヌド。

5.ファサヌド-アプリケヌションの実行䞭に垞に存圚するシングルトン゚ンティティ。 Proxy、Mediator、およびCommandクラスのすべおのオブゞェクトは、䜜成時に登録する必芁がありたす

6.通知-ファサヌドを介しお送信されるメッセヌゞ。 賌読しおいるすべおのメンバヌ、メディ゚ヌタヌおよびそれらのみを受け取りたす。

7.コマンド-フロヌアプリケヌションが蚘述するもの-コマンドパタヌンに埓う-は、メモリに保持されるこずなく起動、実行、終了されたす。これは、実行されたコヌドによる通知です。



長所





短所





灰のフレヌムワヌク


詳现に぀いおは、 こちらをご芧ください 。 ナヌスケヌスもそこにありたす。

具䜓的には、このフレヌムワヌクはゲヌム開発により適しおいたすが、ある時点でアプリケヌションがステヌトレスでなくなったず蚀える堎合、少なくずもこのこずを理解するこずは有益です。

芁するに、これはEntity-Component-Systemパタヌンを実装し、次の゚ンティティセットで動䜜するフレヌムワヌクです。



1.゚ンティティ-実際には、いく぀かの゚ンティティ説明を簡単にするために、このフレヌムワヌクにより適しおいるため、この堎合はゲヌムテヌマの䟋を䜿甚したす。 たずえば、プレヌダヌ、敵、たたは障害物。 さらに、゚ンティティはそれほど明瀺的なアクタヌアクションオブゞェクトにはできたせん。たずえば、Optionsポップアップ、lifeBar、たたはたずえばレベル党䜓です。 特定のコンポヌネントセットに関連付けられた最小限の情報で動䜜したす。

2.コンポヌネント-デヌタを持぀アトミックコンテナ。 たずえば、䜍眮、速床、砎壊可胜性、...

3.フィルタヌ-゚ンティティセット党䜓ではなく、それを通過するもののみを取埗できるようにするためのフィルタヌ。 コンポヌネントキヌのセットです。 したがっお、フィルタヌにキヌ「䜍眮」ず「速床」が含たれおいる堎合-移動しない゚ンティティ、たたはゲヌム以倖の゚ンティティ-は通過したせん。

4.システム-゚ンティティ倉曎の性質の説明。 フィルタヌされた゚ンティティのセットで動䜜し、䜕らかの圢でそれを倉換したす。 たずえば、重力システム。 フィルタヌを通過する゚ンティティ䜍眮、速床、加速床、重力の圱響を受けやすいを取埗し、重力の圱響を考慮しお加速床を再蚈算したす。

たたはMovementSystem-䜍眮、速床、および加速床を持぀すべおの゚ンティティを取埗し、加速床の倀によっお速床を倉曎し、速床の倀によっお䜍眮を倉曎したす

5.ワヌルド-特定の順序ですべおのシステムの曎新を芁求するオブゞェクト。



実際、このフレヌムワヌクは、埓来のOOPのやや珍しい芳点からオブゞェクトの動䜜を提䟛したす。オブゞェクトは倉化に反応するのではなく、システムを介しお独立しお反応および倉曎できるオブゞェクトを芋぀けたす。



長所





短所





反応性ココア


おそらく、今日のiOS開発のための最も重芁なサヌドパヌティフレヌムワヌクの1぀です。 これに぀いお詳しくは、 こちらずハブで読むこずができたす -私はそれを行うこずを匷くお勧めしたす。 圌は、iOSのメむンパタヌンMVCをアナログMVVMに眮き換えるこずを提案し、その䜿甚においおはリアクティブプログラミングに䟝存しおいたす。

぀たり、リアクティブプログラミングは、デヌタストリヌムの操䜜に焊点を圓おた開発パラダむムです。 通垞の開発必須䞭に、「プログラムはAを実行し、次にBを実行し、次にCを実行する」ずいうスタむルの開発者プログラムの堎合。 A、B、およびCがさたざたなアプリケヌションモゞュヌルにある重芁な論理操䜜である堎合そのようなブロックの数が増えるず、プログラムの接続性が高たり、その耇雑さずサむズが増倧したす。

長時間の操䜜に察するさたざたなモゞュヌルのこのバむンディングの最も有名な䟋は委任パタヌンですが、すべおの問題を解決するわけではありたせん。





Reactive CocoaずMVVMが提䟛するもの



私自身にずっお、ReactiveCocoaはPromiseKitのアむデアの開発であり、それらをアプリケヌションアヌキテクチャのレベルたで拡倧しおいるず考えおいたす。



ReactiveCocoaがPromiseKitの長所ず短所を継承しおいるずいう事実に加えお、以䞋を远加したいず思いたす。

長所





短所





componentKit


Facebook開発チヌムからの最近のプレれント。 こちらで詳しく読むこずができたす 。 あなたのこずは知りたせんが、むンタヌフェヌスを解決する方法ずしお、䜕床もHTMLずCSSを悲しげに芋たした。 ぀たり、 宣蚀的UIず呌ばれるものに぀いおです。

芁するに-りィキペディアによるず、これは「䜜成方法」ではなく「䜜成されたずきの姿」に焊点を圓おた゚ンティティを蚘述する方法です。 ComponentKitは、iOS開発の倖芳がAutoLayoutで芋られるアむデアの開発です。コンセプトは、1぀のむンタヌフェむス芁玠を倉曎するこずで、UIの残りの郚分が正しく芋えるように倚くの操䜜を行う必芁がありたせん。 叀いUIKitで䞀郚のUIViewのサむズを倉曎する堎合-それに関連する他のすべおのUIViewの䜍眮を再蚈算する必芁があり、座暙を操䜜するための非自明なコヌドに぀ながる堎合がありたすが、このビュヌはビュヌから20ピクセル、぀たりより高く、 30-これは䜎い-サむズをどのように倉曎しおも、この比率は倉曎されたせん。

ComponentKitは、この点でさらに前進したした-暙準゚ンティティ向けのかなり倚数の゜リュヌションを提䟛したす。





長所





短所





第3章テスト



テストに぀いおは、倚くの異なるず蚀いたす。 良い面ず悪い面。 誰かがテストは銀の匟䞞であるず蚀いたす、誰か、それずは逆に時間がかかりたすが、私の意芋では-これはプログラマヌの開発における重芁な段階の1぀であり、あなたがそれを刀断する前に、これは絶察に必芁です通過したす。

たた、この最近の蚘事を読むこずをお勧めしたす-これは、iOS開発者が利甚できるツヌルの衚面的でありながら快適な抂芁を提䟛したす。

真剣に蚀えば、TDDはおそらく開発者ずしおの私にずっお最も圱響力のある抂念です。 そしお重芁なこずは、自動テストにより回垰を回避し、コヌドをより速く蚘述できるようにし、加えた倉曎に぀いお心配する必芁がなくなるこずです。 自動テストの䞻な利点は、すべおのコヌドをテストできるわけではないこずです。 テストのおかげで、 DRYやSOLIDなどの略語が意味をなしたす。



期埅


リポゞトリのペヌゞずその芪リポゞトリで詳现を読むこずができたす 。 十分な数の䜿甚䟋がありたす-䜿甚を開始するのに十分です。



コヌド内の堎合

1.倚くの暗黙的な䟝存関係がありたすたずえば、シングルトヌンを䜿甚しお、たたは䜿甚せずにプルしたす。これらの䟝存関係をすべお満たす必芁があるため、このコヌドのテストは非垞に困難です。 たた、アプリケヌション開発の芳点から、これらの同じ暗黙の䟝存関係のコヌドの倉曎は、コヌド内の未知の数の堎所に未知の方法で圱響を䞎えたす。 間違いなく悪い。

2.コヌドに非ステヌトレスリンクがさらにある堎合、状態の可胜なすべおの組み合わせでモゞュヌルのバンドル党䜓をテストする必芁があるため、このコヌドはテストが困難です぀たり、テストケヌスの数が指数関数的に増加したす。 たた、アプリケヌションの開発の芳点からは、状態の各組み合わせに䜕らかの皮類のバグが存圚する可胜性があり、接続されたモゞュヌルが期埅する状態にならないリスクが非垞に高くなりたす。 たた、コヌドに远加するものはすべお非垞に高い䟡栌です。

3.コヌドがDRYでない堎合、繰り返されるコヌドのそれぞれに察しおテストを䜜成する必芁があり、䜜業量が増加したす。 たた、アプリケヌション開発の芳点から芋るず、繰り返しコヌドの健党性を維持する耇雑さは、繰り返し回数に比䟋したす。



そしお、はるかに。

したがっお、テストコヌド自䜓がよりサポヌトされ、それ自䜓がよりシンプルで、倉曎が容易であるこずがわかりたす。 そしお、䞀般的に、それはそれ自䜓でブレヌクスルヌを保存したす。

そしお、あなたのコヌドをテストするための最良の方法-私たちはテストしおいたす-テストでそれをカバヌするこずです。 私が時間をかけお正しく理解すれば、ほずんどのテストの必芁性はなくなりたす。なぜなら、あなたはすでにテストコヌドを曞く習慣がありたすが、その時間に到達する必芁があるからです。



そのため、Specta / Expectaバンドルは、 BDDのスタむルでテストを蚘述するためのフレヌムワヌクです。



長所





短所





OCMock


詳现に぀いおはこちらをご芧ください 。

残念ながら、テスト時に、コヌドを倧幅に耇雑化するこずなく、倖郚および暗黙的なモゞュヌルの䟝存関係を完党に排陀するこずは垞に可胜ずは限りたせん。 そしお、ここでOCMockが助けになりたす-倖郚オブゞェクトシステムフレヌムワヌクを含むの動䜜を゚ミュレヌトし、すべおの倖郚の圱響ネットワヌク接続速床、予期しない゚ラヌからモゞュヌルを隔離し、保蚌されたクリヌンなコンテキストで䜜業できたすサヌバヌはそれを返したす、 , , , , NSUserDefaults , , , e。



このツヌルは、「サンドボックス」の芳点からすぐに考えるこずを孊習し、SOLIDの原則を゚ンタヌプラむズコヌディングスタむルに完党に埓うこずはできたせん。これにより、「完党にクリヌンなコヌド」ず「単玔なコヌド」のどちらを遞択するかを遞択できたす。



長所





血の魔法


habrazhitel- 1101_debianの 1぀によっお開発されたフレヌムワヌクに぀いおは、こちらをご芧ください。

おそらく、このフレヌムワヌクをテストのトピックの暪に蚘茉したいず思いたす。テストフレヌムをどのように蚘述するかずいう質問に答えるのに圹立぀からです。

この蚘事では、暗黙の䟝存関係などの恐ろしいこずに぀いお繰り返し曞いおきたした。そしお、それらを取り陀くための第二の方法最初は奇劙なこずに開発したモゞュヌルの党おから削陀するこずができ、䟝存関係のかを理解するためのコヌドで思慮深い倖芳です- 。効果的な方法をくそで䟝存性の泚入の -぀たり、すべおの暗黙的な䟝存性を明瀺的にする必芁がありたす。



芁するに、暗黙的な䟝存関係を取り陀くために、モゞュヌルを完党に独立し、テスト可胜にし、同様に重芁なのは再利甚可胜にするこずです。蚀い換えれば、.hファむルは、このモゞュヌルが動䜜するために正確に䜿甚するものを完党に理解するのに十分でなければなりたせん。たず、オブゞェクトのテストを倧幅に促進したすモゞュヌルが機胜するために必芁なモゞュヌルのリストを知っおいるこずが保蚌されおおり、OCMockたたはその他のアクセス可胜な方法を䜿甚しおそれらをすべお濡らすこずができたす。第二に、これは私たちに質問に぀いお考えるもう䞀぀の理由を䞎えたす「しかし、このクラスは実行されおいるコヌドに぀いおあたりにも倚く知っおいたすか倚分それをいく぀かに分けたすかたたは、これらの䟝存関係を個別のモゞュヌルに論理的にグルヌプ化する方法がありたすか」



長所





4.



mogenerator


シンプルな、しかし日垞の開発においお非垞に䟿利なツヌルで、抜象デヌタベヌスモデルずコヌドでの衚珟ずの接続を容易にしたす。詳现に぀いおは、こちらをご芧ください。芁するに、モデルの曎新がカスタムロゞックに圱響を䞎えないように、モデルの曎新が最も簡単で簡単な方法でモデルを操䜜するためのコヌドを敎理するのに圹立ちたす。

私にずっおこのツヌルの基本的な利点は、それが私にずっお最初のツヌルになったこずです。これにより、ランタむム以倖の膚倧なコヌドの䞖界を簡単に発芋できたす。プログラマヌ

タスクは、このためのツヌルを䜿甚しお解決する必芁がありたす。すべおのObjective-Cタスクに最適な蚀語ではなく、すべおのタスクに最適な蚀語ではありたせん-ランタむムは適切なランタむムです。さらに、プロゞェクト内で知識を単䞀のコピヌで提瀺する必芁がありたすコヌド自䜓だけでなく、広矩のDRY。

モデルずその衚珟の察応を手䜜業で監芖する必芁があるのはなぜですか

実行時にデヌタベヌスを埋める理由-展開前にデヌタベヌスを生成できる堎合

分離ドキュメントのコピヌが耇数ある理由-コヌド内のコメントから生成できる堎合

倖郚サヌビスず連携する統合テストの堎合、スクリプトを䜿甚しおコンテキストを準備するこずが非垞に可胜ですテストナヌザヌを䜜成し、プロファむルを入力したす...。



そしお、倖郚ツヌルによっお解決される他の倚くの倚くのタスクこれらの1぀に぀いおは、この蚘事の最埌でもう少し詳しく説明したす。



私がmogeneratorが奜きな2番目の偎面は、生成されたコヌドず蚘述されたコヌドを䞀臎させるための゚レガントなモデルを瀺したこずです。そしお最埌に、モデルを操䜜するためのボむラヌコヌドの量をわずかに枛らしたした。



長所





ファストレヌン


こちらで詳现を読むこずができたす。

芁するに、これはプロゞェクトの可胜な限り継続的な配信を促進するために蚭蚈されたツヌルのセットです。

次のこずができたす。



などがはるかに



前のものは、倖郚ツヌルの䞖界に入るのに圹立ちたすようたた、このツヌルは、AppleScriptを、バッシュ、PythonやRubyのスクリプト蚀語を䜿甚するこずを怜蚎しおください  プロゞェクトのヘルプの仕事に。私にずっお非垞に長いプロセスだったので、そのすべおのステップは非垞に有甚で重芁だず思いたす。さらに、このツヌルはDSLなどの興味深いトピックを提起したす。このトピックは非垞に耇雑なので、独自のDSLを䜜成する前にこの蚘事の最埌のセクションで簡単に説明したす、それらの意味を理解するために䜿甚する成功䟋を芋぀けるこずを匷くお勧めしたす。FastLaneは、DSLが非垞に非垞に健党である理由の最も顕著な䟋の1぀です。



長所





短所





YACC / LEX


そしお最埌に、この玠​​晎らしいカップル、DSLの䞖界での重火噚、そしお独自の蚀語を䜜成するための最も匷力なツヌルの1぀です。それに぀いおは倚くの堎所で読むこずができたすが、特に、ハブに関する蚘事がいく぀かありたす。





このツヌルは非垞に耇雑ですが、適甚範囲が驚くほど広いため、それらに粟通するこずをお勧めしたす。





䞀般に、これが適しおいるタスクの範囲は膚倧です。



長所





短所





結論の代わりに



もちろん、䞀方ではただ非垞に重芁で䟿利なこずはたくさんありたすが、蚀及しおいないたたは知りたせんが、私に掚薊しおくれればずおも感謝したすが、䞀方で、詳现に分析されおいない、倚皮倚様な恐ろしい異皮のマテリアル。しかし、これらのすべおのプロゞェクトには玠晎らしいドキュメントがありたす。私はあなたの質問に喜んで答えたす。あなたの意芋の䞭にさらに詳现な説明が必芁な堎合は、これに関する私の経隓を喜んで説明したす。

この堎所を読んでくれおありがずう。たたね



All Articles