新卒プログラマの技術と教養のブログ

技術・教養、色んな情報をシェアしていきます

新卒プログラマの学習ログ 〜 Androidアプリ開発 MVVMとは? 〜

f:id:Nao_RandD:20200927151111j:plain

App Architecture

Codelabsをとりあえず一周、手を動かしながら進めてみました。

その中で、書かれているコードのパターンが、MVVM(Model-View-ViewModel)と呼ばれるアーキテクチャです。 Googleより推奨されているライブラリを用いた実装パターンで、これに従うことでメンテナンス性、可読性に優れたプログラムとして開発を行うことができるとされています。 しかし、普及としては割と最近のようで、Androidアプリ開発者用の参考書ではまだまだ異なるパターンの記述が多い印象です。

MVVMとは?

先述の通りModel-View-ViewModelを表しています。

Model

データを管理する役割を担います。 APIやデータベースを扱う際のDaoやdataクラスに当たります。

View

UIコントローラーの役割を担います。 画面表示や遷移、Fragmentの切り替えやユーザーのアクションを検知するリスナーをここで設定します。 Viewの管理はDataBindingのライブラリによって行っています。 下記のコードではフラグメントでの実装です。

class MainFragment : Fragment() {

    // OnCreateView以外でも参照するため、lateinitで定義しておきます
    private lateinit var binding: MainFragmentBinding

    private lateinit var viewModel: ViewModel

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        binding = DataBindingUtil.inflate(
                inflater,
                R.layout.game_fragment,
                container,
                false
        )
        Log.i("MainFragment", "Called ViewModelProviders.of")

        // viewModelの取得
        viewModel = ViewModelProviders.of(this).get(GameViewModel::class.java)

        binding.sampleButton.setOnClickListener { onClick() }
        
       
        return binding.root
    }

    /** ボタンクリック時に実行するメソッド **/

ViewModel

Modelからデータを取得するViewとModel間の仲介的役割を担います。

とりあえず。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。

初学者から一人前まで、、

ここでは一人前のプログラマの定義を 「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」 とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間 およそ340時間 どんどん更新していきます。