>>89
責務を明確にしてカプセル化で防御する
オブジェクト指向の基本だ

stringじゃ何でも表現出来すぎて責務が曖昧すぎる
stringには注文番号でも従業員名でもなんでも入ってしまう
これじゃそいつの正体がまったくわからないし何をやりたいのかも曖昧だ
そいつに適用可能なオペレーションも多すぎて利用者は簡単に間違える
注文番号オブジェクト.substring(1, 5)果たしてこれは注文番号にとって正しいオペレーションなのか? わからない…

一方で
class OrderNo {
private string asText;
... (略)
}
class EmployeeName {
private string asText;
... (略)
}

といったValueObjectを使えばそれが注文番号や従業員名であることが明確になる
適用可能なオペレーションはクラスのメソッドとして厳格に定義されるので利用者が間違えることもない
注文番号オブジェクト.substring(1, 5)が注文番号にとって正しくないオペレーションなら実行することはおろかビルドすらできない
もし仮に正しいオペレーションならIDEが補完をしてくれるドキュメントコメントで説明を表示してくれる
実にエレガントだ
美しい世界へようこそ