クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

結合度と凝集度とは何か

このレッスンのあとで: 結合度と凝集度で、設計のよしあしを判断できる。

55分のレッスンコマンド6件PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

設計のよしあしを測る2つのものさし

結合度と凝集度は、ソフトウェアの設計のよしあしを測る、2つのものさしです。結合度は部品どうしの頼り方、凝集度は1つの部品の中身のまとまりを見ます。

設計が悪いと、1か所を直しただけで、思わぬ所が壊れます。このレッスンでは、部品とつながりを数えて、変更が広がる範囲を見積もります。

このレッスンのゴール

メモ

結合度と凝集度で、設計のよしあしを判断できる。

重要な言葉

ことばいみれい
部品1つの仕事を受け持つ、プログラムのまとまり注文、在庫
依存ある部品が、別の部品を使うこと
結合度部品どうしが、どれだけ強く頼り合うか
凝集度1つの部品の中身が、どれだけ同じ仕事に向かうか
変更の波及1か所の変更が、他の部品に広がること

学生が入力するセルは、このプレビューでは空白です。

結合度は部品どうしの頼り方

部品Aが部品Bを使うとき、AはBに依存します。依存が多く、強いほど、結合度は高いと言います。

Bを変えると、Aも直す必要が出ます。結合度が低ければ、変更は部品の中で終わります。目指すのは、低い結合度です。

凝集度は1つの部品のまとまり

1つの部品の中身が、同じ仕事に向かっているとき、凝集度は高いと言います。仕事がばらばらだと、凝集度は低くなります。

「注文と在庫とメール送信」を1つにした部品は、凝集度が低い例です。メールの文面を直すだけで、注文の部品を開くことになります。

例: 凝集度の高い部品と低い部品

部品中身凝集度
注文注文を受ける。合計を計算する。注文を保存する高い。注文だけの仕事
何でも屋注文を受ける。メールを送る。ログを消す低い。仕事がばらばら
在庫在庫を数える。在庫を減らす高い。在庫だけの仕事

学生が入力するセルは、このプレビューでは空白です。

変更が広がるかをラボで見る

ラボの API は、アプリとデータベースの間の部品です。アプリが列の名前を知っていると、アプリはデータベースに頼ります。

表に列を足したときと、列の名前を変えたときで、同じ読み取りの結果がどう変わるかを見ます。順に Run してください。

文房具の表を作る

コマンド
PGPASSWORD=shop psql -h db -U shop -c "drop table if exists items; create table items (id serial primary key, name text not null, price_yen int not null); insert into items (name, price_yen) values ('Notebook', 180), ('Pen', 120); notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

名前と値段を読む

コマンド
curl -s -w "\n" "http://api:3000/items?select=name,price_yen&order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

表に列を足す

コマンド
PGPASSWORD=shop psql -h db -U shop -c "alter table items add column note text; notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じ読み取りをもう一度

コマンド
curl -s -w "\n" "http://api:3000/items?select=name,price_yen&order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

列の名前を変える

コマンド
PGPASSWORD=shop psql -h db -U shop -c "alter table items rename column price_yen to price; notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

古い名前で読む

コマンド
curl -s -w "\n%{http_code}\n" "http://api:3000/items?select=name,price_yen&order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

部品どうしがまったく頼り合わなければ、最良だと考えがちです。部品が何も頼らなければ、システムは何もできません。目指すのは、必要な頼り方だけを、少なくすることです。

例: 変更と広がり

変更同じ読み取りの結果広がり
表に列を足す前と同じ2件広がらない。結合度は低い
列の名前を変える400。読み取りが壊れたアプリまで広がる。結合度は高い

学生が入力するセルは、このプレビューでは空白です。

このラボとソースについて: PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。