privateメソッドを作りたくなった時は存在するべきクラスを見逃している#
このページの見出しを見て「えっ?!」と思う人は多いでしょう。でも、私がマネージメントする開発では「privateメソッド禁止」は当たり前なんです。例を使った下の説明で詳しい内容は理解して欲しいのですが、要点だけを言うと、
「privateメソッドに渡すパラメータをひとかたまり(データ構造)とするクラスを見逃している。」#
ということです。顧客会社クラスで考えてみる#
商取引を扱うシステムで良く出てくる「顧客会社」クラスを使って考えてみます。![]() |
public String getTantoushaSimei() { return this.tantoushaSei + " " + this.tantoushaMei; }
次に、このクラスが仕様変更となり、「代表者姓」と「代表者名」という属性が追加されたとします。「代表者氏名を返す」というメソッドもこの時必要になったとすると、以下のようなコードを追加することでしょう。
public String getDaihyoushaSimei() { return this.daihyoushaSei + " " + this.daihyoushaMei; }
そして次に、「いずれの氏名を返す時も、姓と名の間のスペースを2つに替えて欲しい。」という要望が挙がったとします。よく見てみると上記二つのメソッドは非常に良く似ています。「スペースを挟んで姓と名を連結する」という仕様だからです。こういう時、privateメソッドを作っておくと変更が一カ所で済んだはずです。次のようなコードです。
private String getSimei(String sei, String mei) { return sei + " " + mei; } public String getTantoushaSimei() { return getSimei(this.tantoushaSei, this.tantoushaMei); } public String getDaihyoushaSimei() { return getSimei(this.daihyoushaSei, this.daihyoushaMei); }
果たして本当にそうでしょうか? 例えば「仕入れ先」クラスが別にあったとして、その属性にも「担当者姓」「担当者名」があったとしたらどうでしょう? そしてそのクラスにも「担当者氏名を返す」というメソッドが必要で、「姓と名の間にスペースを2つ挟む」という仕様だったら?
ユーティリティクラスを作ってみる#
添付ファイルの追加
ログイン済のユーザのみが添付ファイルをアップロード出来ます。
添付ファイル一覧
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
png |
custocompany1.png | 3.3 kB | 1 | 25-6-2011 03:28 | ytp | |
png |
custocompany2.png | 4.1 kB | 1 | 25-6-2011 03:28 | ytp | |
png |
name.png | 8.2 kB | 4 | 31-12-2011 21:46 | ytp | |
png |
name2.png | 8.3 kB | 3 | 31-12-2011 21:43 | ytp | |
png |
supplyer.png | 3.4 kB | 1 | 25-6-2011 03:28 | ytp |
«
This particular version was published on 19-6-2011 00:02 by ytp.