その他
ただ、WEB業界では、プログラム知識に明るくない営業がお客様とヒアリングをして、
システム設計をしていることが多いようです。
設計をする上で重要なことは、
やはり、オブジェクト指向:単一責任の原則であるかという点です。
たとえば、
オフィスで全員分のお昼を注文したとします。
ある人はパンを食べたいと言い、
ある人はピザを食べたいと言い、
また、ある人はからあげ弁当を食べたいと言い出します。
全員の希望を満足するデリバリーサービスを探すのは困難ですし、
誰かが妥協しないといけません。
当たり前ですが、そんな時は、
ピザはピザ屋さんからデリバリーをして、
パンは近所のパン屋さんに買出しに行って、
お弁当はお弁当屋さんからデリバリーをしてもらえばいい訳です。
これこそが単一責任の原則です。
ピザ屋さんはピザを作ることだけに専念して、
お弁当屋さんはお弁当を作ることだけに専念すればいいのです。
WEBの世界では、
CMSの記事投稿システムなど、
ひとつのフォーマットで、記事投稿とフォトアルバムを同時にできるようにしたい
というような要望がよくあります。
しかし、この要望は、単一責任の原則に反しています。
そうです、これはピザとからあげ弁当を同時に販売しているデリバリーサービスを作ろうとしている状況と同じです。
単一責任の原則からいえば、2つのフォーマットを作成して、
・1つのフォーマットは記事投稿しかできないと限定する。
・もう1つのフォーマットはフォトアルバムしか作成できないように限定する。
と設計します。

単一責任の原則に基づくとメンテナンス性が高い。

単一責任の原則に基づいていないと、メンテナンス性が低い。
さらに、ロジックが複雑になるため、処理が重くなる。
確かに、1つのフォーマットで2つできた方が「すごいことをしている」感じはあります。
WEBの営業担当は「お客様にすごいことができるアピール」をしたいがために、
「できます!」と答えてしまいがちです。
しかし、昔に流行ったビデオデッキ付テレビが壊れやすいのと同じように、
「いろんなことができる」という設計は将来、機能を拡張したいときに必ず破綻します。
初期の段階で、オブジェクト指向:単一責任に基づいて設計ができていることこそが大切なのです。
(satoshi)
オブジェクト指向:単一責任の原則に基づいた設計とは?
プログラミングでは「オブジェクト指向に基づいてコーディングしなさい」なんてことをよくいわれます。
プログラムを組む上でオブジェクト指向は大切な考え方の一つです。ただ、WEB業界では、プログラム知識に明るくない営業がお客様とヒアリングをして、
システム設計をしていることが多いようです。
設計をする上で重要なことは、
やはり、オブジェクト指向:単一責任の原則であるかという点です。
たとえば、
オフィスで全員分のお昼を注文したとします。
ある人はパンを食べたいと言い、
ある人はピザを食べたいと言い、
また、ある人はからあげ弁当を食べたいと言い出します。
全員の希望を満足するデリバリーサービスを探すのは困難ですし、
誰かが妥協しないといけません。
当たり前ですが、そんな時は、
ピザはピザ屋さんからデリバリーをして、
パンは近所のパン屋さんに買出しに行って、
お弁当はお弁当屋さんからデリバリーをしてもらえばいい訳です。
これこそが単一責任の原則です。
ピザ屋さんはピザを作ることだけに専念して、
お弁当屋さんはお弁当を作ることだけに専念すればいいのです。
WEBの世界では、
CMSの記事投稿システムなど、
ひとつのフォーマットで、記事投稿とフォトアルバムを同時にできるようにしたい
というような要望がよくあります。
しかし、この要望は、単一責任の原則に反しています。
そうです、これはピザとからあげ弁当を同時に販売しているデリバリーサービスを作ろうとしている状況と同じです。
単一責任の原則からいえば、2つのフォーマットを作成して、
・1つのフォーマットは記事投稿しかできないと限定する。
・もう1つのフォーマットはフォトアルバムしか作成できないように限定する。
と設計します。

単一責任の原則に基づくとメンテナンス性が高い。

単一責任の原則に基づいていないと、メンテナンス性が低い。
さらに、ロジックが複雑になるため、処理が重くなる。
確かに、1つのフォーマットで2つできた方が「すごいことをしている」感じはあります。
WEBの営業担当は「お客様にすごいことができるアピール」をしたいがために、
「できます!」と答えてしまいがちです。
しかし、昔に流行ったビデオデッキ付テレビが壊れやすいのと同じように、
「いろんなことができる」という設計は将来、機能を拡張したいときに必ず破綻します。
初期の段階で、オブジェクト指向:単一責任に基づいて設計ができていることこそが大切なのです。
(satoshi)




