破棄されたブログ

このブログは破棄されました。

プレゼンテーション層とアクセサと

往々にして OOP においてはアクセサは作るべきではないという話を聞くわけだけど、プレゼンテーション層だとアクセサは使わざるを得ないよなあとか思って悩んでる。
まず、アクセサを使うべきでない理由を三つほど挙げるてみる。

  • アクセサはメソッドだから呼び出すためにオーバーヘッドが生じる。*1
  • アクセサ書くのダルい。*2
  • アクセサなんてあったらカプセル化が崩壊するだろやめろ。*3

一番目と二番目に関しては、とりあえず置いておく。というか二番目に関しては PHP ならマジックメソッド使えばいいし、 C# なんかのモダンな言語には書かなくてもいいような仕組みがあるみたいな話を聞いたから言語によっては問題にならない。
じゃあ何が問題かっていうと三番目で挙げられるカプセル化の崩壊ってやつなんだけど、プレゼンテーション層の実装をするときには、アクセサがないと厳しいよねえ。データを入力・編集するためのフォームとかね。
例えば、人間を管理するための Person クラスがあって、人間の情報を変更するインタフェースをユーザに提供する事になったとする。それで、例えば結婚で姓が変わって新しい姓に書き換えてやる必要が出てきた時にどうするか。
どうするもこうするも、このクラスに設定されている姓が lastName フィールドだったりしたら、結局 setter を使うしか手段が思い浮かばないんだよね。姓 lastName を書き換えるメソッド名を changeLastName() とかにしたところで、出来上がったメソッドは実質的に setter だよね。
だから、プレゼンテーション層でデータをやりとりする必要があるクラスに関してはどうしてもアクセサが必要になっちゃうんじゃないかなあと。そんなことを思ったわけです。。。
うん、そもそも今のプロジェクトは多層アーキテクチャじゃないんでアレなんだけどね。

*1:http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)#.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B5

*2:http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)#.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B5

*3:http://www.slideshare.net/MoriharuOhzu/ss-14083300

広告を非表示にする