

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`はいらないのでは？  
という感じです。

そもそもの設計に良くない部分があるかもしれませんが、  
どうかどなたかアドバイス等よろしくお願い致します。

[code]

    ルート
    ├── 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による挙動を定義
    
[/code]


CC BY-SA 3.0
2015-09-14T10:34:01.273
16595
2016-11-04T10:27:08.017
9710
question
android mvc
パッケージの分類に悩んでいるクラス群があるのですが


MVCに関しては様々なご意見がありますのでご参考まで。

今のところ私は以下のように分類しています。

  * Controller 
    * 処理のエントリーポイント (onCreate, onClick など)
    * UI操作などのイベントを受けて Model に処理を指示する
    * Activity, Fragment などが主に該当する
    * 設計次第では BroadcastReceiver や Service が該当する場合もある
  * View 
    * View を継承したクラス (カスタム View)
  * ModelViewAdapter 
    * ArrayAdapter など、 Model と View の橋渡し役
  * Model 
    * Controller にも View にも属さないものすべて
    * Model が更新されたら View などに通知して更新する


CC BY-SA 3.0
2016-11-04T10:27:08.017
30099
2016-11-04T10:27:08.017
19425
16595
answer