◆ Model は Model を使う側に必要な関数置き場みたいな扱いで状態は持たない
◆ というのしか書いたことも見たこともなかったから 状態持たせる作りは新鮮
◆ だけど デスクトップアプリならともかく Web だとリクエスト単位で別プロセスだからあまり活用できなそうかも

先に書いておくと 私の場合は一人で好き勝手作ってる物が多いので MVC とか MVVM みたいなデザインパターンみたいなのにはそれほどこだわりがないです
気にせずそのときの自分が一番扱いやすいだろうと思う方法で書くこともあれば 使うツールがそうなってるから MVC にしたり とかそういう感じです

で これまで Model という分け方をするもので Model に状態をもたせるというのが私がちゃんと読んだコードや自分で作ったものではありませんでした

DB アクセスやネットワークアクセスなど の機能を関数(メソッド)として用意してるだけ
ものによっては 全部 static メソッドとして書かれていることもあるようなものです

なので私自身が作るときも static にするかはともかく状態をもたせるプロパティはなく (アプリ全体のインスタンスへの参照とか別モデルへの参照を毎回取得や作成しないために保存するプロパティはある) Model を使う側は関数として呼び出して返り値を使う もしくは DB の更新をするなど外部へのアクションを期待するというものでした

だけど暇な時に C# の MVVM 構成で作られたコードを見てたときに Model に状態を持たせているのがありました
すごく新鮮というか驚きでした

Model という定義に状態をもたせるべき/もたせるべきでない とか決まりがあるのかは知らないですが オブジェクトな以上持たせることもできます
それで何かもっと便利にできないかなー と思ったのですが特に今のところ思いついてません


考えてみると 私は基本 Web 関係ばかりいじってます
Web だとステートレスでリクエストがあったときに一度サーバで処理されるだけで 次のリクエストで以前のオブジェクトを引き継ぐことはありません
やろうとすれば session に JSON などシリアライズしたテキストを保存して次のリクエストでデシリアライズすることで データとしては同じにはできますが通常は Model とかそういう部分を保存・復元という扱いをすることはないと思います

それに対して C# のデスクトップアプリケーションみたいなものだと 最初に画面を開いたときからユーザのアクションがあったとき 最後に閉じるときまでずっと同じ Model を使い続けられます
だからこそ Model に状態を保存しておくメリットがあるのかもしれません

Web だとプログラム自体が長くても 1 リクエストで実行される部分って思いの外少なくて 保存してもそれを使うときが来ないのかもです
けど 何か良い使い方ないかなーと思うのですよね