ViewModel関係への見解をSwiftuiで明らかにする方法


Swiftuiは、モデルビューViewModel(MVVM)パターンと一緒に使用すること自体をよく表します.あなたは、ビューのロジックと行動のすべてをビューモデルに移動することによってリーンを保つことができます.
理論上、ビューモデルのパワーを異なるビューとすることができますが、リスト内の行だけでなく、詳細画面でも、実際にはビューとビューモデルの間に1 - to - 1関係があります.
この接続をより明確にするために、私たちはnested typesと呼ばれる迅速な言語機能を使用することができます.ビューモデルはビュー内の型として定義できます.

入れ子型ビューモデル


入れ子になった型は、「サポートする型の定義の中で列挙体、クラス、および構造をサポートするネスト」を可能にします
ビューモデルとビューモデルの間に1 - to - 1関係がある場合、ビューモデルが単一のビューをサポートしている場合、入れ子になった型は、その関係を明示的に明示するには最適です.
struct BookDetail: View {

    @ObservedObject private(set) var viewModel: ViewModel

    var body: some View { ... }
}

extension BookDetail {

    class ViewModel: ObservableObject { ... }
}
このコードの作業例は242479152である.
ネストされた型のおかげで、ビューモデルの完全な名前は@ObservedObjectです.これは、ビューモデルがBookDetail.ViewModelに関連していることを意味的なレベルで明らかにします.BookDetailBookDetail.ViewModelとは違うとは言えません.さらに、Xcodeはファジー自動補完機能を持っているので、動作するときには- 2を入力するときには違いはありません.
それがすべて本当である間、このアプローチは無関係のタイプで2つの概念を保つことと比較して若干の利点を持ちます.

ギタブについて 利点-より明確でより少ないエラー傾向


まず最初に、入れ子になったタイプを使用することは、単に彼らの名前に頼るより明らかに2つのタイプの関係を作ることを繰り返す価値があります.私は、このモデリングは、それがコードを理解しやすくなって、 でデザインを表していると思います.
ビュー定義内で、ビューモデルをBookDetailViewModelとして参照できます.これはコードをよりコンパクトにします.
入れ子になった型もリファクタリングを簡単にします.
我々はビューを変更する必要がある場合は、ViewModelに触れる必要はありません.
つのタイプの名前が分岐するのは不可能です.
私たちはビューを更新した後のビューモデルを更新することを忘れないことができますので、更新をしないでください我々はViewModelを使用してBookDetailビューを持っていることはありません
同じように、ビューモデル型の名前のルートにはtypoを作る機会はありません.
私がこのアプローチの純度が好きであるように、それは過去を見るのが難しいという欠点とともに来ます:それは、すぐに開いている表示モデル・コードを見つけることをより難しくします.

より正確なレベル すぐに開く1つの不利


は、あなたの名前を入力してファイルを見つけるとファジーを可能にするXcode機能です.を押すと、画面上に検索フィールドが表示されます.あなたのクエリを入力すると、Xcodeの結果が表示されます.
入れ子型のビューモデルの場合、右の型を簡単に持ち上げることができるクエリ、ファジィまたはNOTがありません.
たとえば、「Bookdet」はBookInfoViewModel.ファイルを表示しますが、View Modelクラスについては触れません.そのファイルにジャンプすれば、スクロールするかViewModelでクラスを見つけなければなりません.
Open Quickly
“BookDesilViewModel”を検索すると、クエリが明示的であるにもかかわらず、結果は得られません.“ViewModel”はすべてのViewモデルクラスを返します、そして、あなたは正しいものを特定するために各々の線の上で小さいファイル名フィールドを読む必要があります.
唯一の解決策は、専用のファイルにビューモデルを保持することです.あなたがそうするならば、「BDVM」のようなファジー質問はShift Cmd Oを引き起こします.

専用のファイル内のビューモデルを抽出するには、ドメインを分離して、2つの開発者が異なるブランチで並列にビューとビューモデルを操作しているときにマージコンフリクトの機会を避けるために、とにかくやりたいことがあります.それでも、オブジェクトを効率的に見つけるためにそれをしなければならないことはうるさいです.

うん、いや?


ビューモデルの入れ子型を使用する利点のどれも、人生の変化です.このアプローチは、ビューの機能の点からあなたのアプリをより良くすることはありません、また、それはあなたの時間を節約したり、間違いを作る可能性を減らすでしょう.それはすべての構文の砂糖、最高です.
より賢い探しているコードであるか、より少しのタイピングをして、チームのDEVSを信用するのがより良いです、タイプの名前に基づいてまだ1 - to - 1関係を得てください、そして、コードレビューは2つが分岐するケースを捕えます?
私は実際の世界でチームにこのパターンを使用する機会がなかったので、私は確かにそれに答えることができない.私はこのアプローチを魅了し、それを共有したいと思った.
あなたはどう思いますか.私はあなたから聞いてみたい!以下のコメントを残したり、Twitterでタッチで取得します.