質問: MVCをベースに現在後述のようにクラス分けを行っていて、 最後の`その他Fragment関連のもの`にあるクラスをどうすべきか悩んでいます。 主に`1画面1Fragment1カスタムViewGroup[1DataLoader1Data]`という感じで設計してきました。 `カスタムViewGroup`を作成したのはviewに当たるクラスを自分でnewしたくなかったというのと、 こうすることによってそのクラスにFragmentからrootViewを渡す必要がなくなるからです。 そんなFragmentは、主に`DataLoader系`や`Setting系`の生成をしているだけです。 分類に悩んでいるクラス群はそんな`カスタムViewGroup`や画面の設定等を定義したクラス群です。 `HeaderViewCreator`も`カスタムViewGroup`にしてCreatorを取るつもりでしたが、 controllerにやらせるべきだろう記述があるのでそのままになっています。 他にも`PagerView`や`PhotoListView`などにもcontrollerにやらせるべきだろう記述が 混ざっていたりします。 また、`Setting系`はカスタムViewにすべきでない?したとしても名前どうする? という感じでそのままになっています。 また、`LoginFragment`や`DialogFragment系`については分離することに意味があるのかわからず そのままになっています。 少なくとも厳密にMVCでなくても`その他Fragment関連のもの`にあるクラスを自分で納得できる形で 必要に応じて中身を整理するなどして1つのパッケージもしくは複数のパッケージに分類できたらと考えているのですが、どうすれば良いかがわかりません。 `View系`はcontrollerが混ざっていたとしてもview_controllerとしてまとめればいい と考えていますが、他の`Setting系`はどうする?そもそも`SettingPhoto`はいらないのでは? という感じです。 そもそもの設計に良くない部分があるかもしれませんが、 どうかどなたかアドバイス等よろしくお願い致します。 ``` ルート ├── MainActivity ----------------------- UserEventによる画面遷移等を定義 ├── base ------------------------------- ベースクラス用 │ ├── BaseDialogFragment ------------- DialogFragmentのベースクラス │ ├── BaseFragment ------------------- Fragmentのベースクラス │ └── BindableAdapter ---------------- Adapterのベースクラス ├── fragment --------------------------- FragmentやDialogFragment用 │ ├── HeaderFragment ----------------- ヘッダーを含む画面のベースクラス │ ├── LoginFragment ------------------ ログイン画面 │ ├── PhotoFragment ------------------ 写真拡大画面 │ ├── PhotoListFragment -------------- 写真一覧画面 │ ├── PriceListFragment -------------- 価格表画面 │ ├── WebViewFragment ---------------- WebView画面 │ └── dialog ------------------------- DialogFragment用 │ ├── ConfirmDialogFragment ------ 確認ダイアログ │ └── MessageDialogFragment ------ 表示ダイアログ ├── model------------------------------- モデル用 │ ├── Api ---------------------------- APIを叩くのに使用 │ ├── AppController ------------------ Application Volleyの管理 │ ├── PagerData ---------------------- ページャ表示に必要なデータを保持 │ ├── PagerDataLoader ---------------- ページャ表示に必要なデータをロード │ ├── PhotoDownloader ----- ---------- 写真をSDにダウンロード │ ├── PhotoItem ---------------------- 写真一覧の1アイテムのデータを保持 │ ├── PhotoListData ------------------ 写真一覧表示に必要なデータを保持 │ ├── PhotoListDataLoader ------------ 写真一覧表示に必要なデータをロード │ ├── PriceItem ---------------------- 価格表の1アイテムのデータを保持 │ ├── PriceListData ------------------ 価格表表示に必要なデータを保持 │ ├── PriceListDataLoader ------------ 価格表表示に必要なデータをロード │ ├── User --------------------------- ログイン・ログアウト処理を定義 状態を保持 │ ├── UserEvent ---------------------- ユーザーイベント(○○画面へ行くなど) │ └── Watermark ---------------------- PhotoView系のBitmapに透かしをつける ├── utility ---------------------------- ユーティリティー用 │ ├── Animation ---------------------- 画面遷移時に使うアニメーションを定義 │ └── UrlUtility --------------------- URLに関するユーティリティーメソッドを定義 ├── view ------------------------------- カスタムViewやAdapter用 │ ├── CategoryView ------------------- カテゴリ名用のカスタムTextView │ ├── PhotoView ---------------------- 写真用のカスタムImageView │ ├── ScalingPhotoView --------------- 写真拡大用のカスタムPhotoView │ └── adapter ------------------------ Adapter用 │ ├── PhotoListAdapter ----------- 写真一覧用カスタムBindableAdapter │ └── PriceListAdapter ----------- 価格表用カスタムBindableAdapter └── その他Fragment関連のもの ------------------------ 以下を一括りにするか、もしくは- ├── HeaderViewCreator -------------- ヘッダーの設定と挙動の定義 ├── PagerView ---------------------- 写真一覧のページャ用カスタムFrameLayout ├── PhotoItemView ------------------ 写真一覧の1アイテム用カスタLinearLayout ├── PhotoListView ------------------ PhotoListFragmentのカスタムLinerLayout ├── PriceListView ------------------ PriceListFragmentのカスタムLinerLayout ├── SettingPhoto ------------------- ScalingPhotoViewにロードを頼むだけ └── SettingWebView ----------------- WebViewの設定とURLによる挙動を定義 ```
回答: MVCに関しては様々なご意見がありますのでご参考まで。 今のところ私は以下のように分類しています。 * Controller + 処理のエントリーポイント (onCreate, onClick など) + UI操作などのイベントを受けて Model に処理を指示する + Activity, Fragment などが主に該当する + 設計次第では BroadcastReceiver や Service が該当する場合もある * View + View を継承したクラス (カスタム View) * ModelViewAdapter + ArrayAdapter など、 Model と View の橋渡し役 * Model + Controller にも View にも属さないものすべて + Model が更新されたら View などに通知して更新する