[ホームへ戻る] [前へ] [上へ] [次へ]

1.分類

まず、第一の基本は、「分類」です。

エンティティにしろ、処理にしろ、まずは局在局所で、ある一連のデータ、処理は同じところにまとめておくのがよいのです。これがモジュール化の発想です。そうすることで、可読性が高く、無駄のない、修正しやすいアプリケーションとなります。

分類の問題は、ソースコードに限りません。一般的に整理されている部屋は、何がどこにあるかすぐにわかります。図書館や本屋を例にとって見れば、まず大分類で、小説、ビジネス、科学、学参など、大分類から、中分類、小分類と、上からたどっていけば目的の本にたどり着くことができなす。類似するものをグループ化し、さらにそれを大きな分類に入れていく感じになります。

とはいえ、分類にはしばしば厄介な問題があります。超整理法の野口氏の提唱するコウモリ問題です。複数の分類にまたがるようなものをどうするかという問題です。

また、いずれの分類にも属さないものをその他に入れるようにしていると、その他が膨れ上がり、再度分類しなおさなければならなくなります。

また、将来の拡張性を見込んで、分類体系をきっちりしておくと、何もないフォルダがたくさんできてしまいます。図書館でいえば、本が置いていない棚がたくさんできることになります。都市計画を立てインフラを整備したはいいが、誰も来ないで閑古鳥が鳴いているような感じですね。当然、見栄えはよくないし、「何だこれは。使ってないじゃないか」と批判を受けることになります。だからといって、その都度分類を行うと、絶えずメンテの手間がかかります。

ソースコードでも同じ問題が起きます。少数であったとしても機能上、あるいは将来の拡張性といった観点から分類しておくのがいい場合もあれば、管理しやすさから一緒にしておいたという考えがあります。

この分類は、ソースコードにおける処理やメソッドの分類、エンティティ(処理対象となるデータ)の分類、設定ファイル等の分類が含まれます。分類が適切に行われると、物事がきれいに整理され、構造がつかみやすくなります。分類の仕方は、その人の、物事に対する理解の度合いを表します。

さらに、機能だけで分類するのではなく別の角度からも分類します。例えば、表示(View)とロジックの部分を分離するのです。表示は、ユーザに対してどのように見せるかというもので、ロジックとは別個の扱いをすることができ、またその方がメンテナンスもしやすいのです。表示の仕方は、ロジックとは独立して変更することができます。

例えば、数字を入力すると、その三乗の値を返すプログラムを書いたとしましょう。このとき、デザイナーが凝って、画面の色や形、文字のフォントなどを変えたとしても、入力した数値に対して3乗して返すというロジックは変わりません。そのため、表示の部分とロジックの部分とでは、クラスを分け、ソースファイルを分けるのです。そうすれば片方のファイルだけ修正すればよくなります。あるいは表示のバリエーションを用意して、ロジックの部分を共通で使いまわすこともできます。ところが一緒になっていると、ソースの中で入り混じってしまい、修正箇所を探すのが厄介になります。

そういう意味では、分類という言葉よりも、分離という言葉の方が適切かもしれません。一つのクラスやメソッドにに混じっているものから、分離できるものを切り離すのです。

例えば、ここに自営業の人がいたとしましょう。この人は、研究もするし、物の製作もするし、営業もするし、経理もします。取引が小さい規模のときはそれでもいいかもしれません。しかし、規模が大きくなってくると、一人では回らなくなってきます。では人を増やしたとき、自分と同じように何でもできる人を雇うべきでしょうか。これは自分がしばらく留守をしたりする場合にはいいかもしれません。ただしその人が覚えなければならないことは多く負担が大きいでしょう。これはシステムを冗長化して負荷分散を図る場合の発想です。ソースコードを書く場合には、それぞれの専門に分ける、という発想をとります。つまり、研究者、製作者、営業、経理とそれぞれ人を雇い、自分は全体を統括する立場に立ちます。そのようにした方が、効率的です。

実際の処理をする部分と、外からの依頼を受け止める仲介屋とを分けるのがよくデザインパターンで使われるテクニックです。つまり、切り出せる部分をうまく切り出して、一つのクラスが単一の目的で使用されるようにするのです。

次に述べる共通化でも、複数のクラスで処理が重複したときや、部品として使える部分を切り出すようにしますが、ここではさらにそのクラスが持っている要素を分析し、分離できる部分を抽出し、分けてしまいます。その際、どの切り口で分離するか、という点が重要です。切り口次第で、再利用性が変わったりします。

共通化は、共通して使うものがあった場合に行いますが、分類では共通して使うものがなくても、機能上分けられるものは分けてしまいます。

※分類・分離と来たら、統合と来るのが通常の発想かもしれません。分離したものの間の関係性、分類されたものの上位概念、そういった構造をつかむことが必要になってきますが、まだその点については追究不足です。






この内容についてご意見をください

 
   役に立った    まあまあ    つまらない    難しい    疑問がある

コメント(質問・指摘・要望なんでもどうぞ)
  
メールアドレス: 

  

Copyright Dayan All rights reserved. Last Update: 2004.08.31