1️⃣
[読書メモ]オブジェクト設計スタイルガイド 3章9~10節 with TypeScript
オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
3.9 名前月コンストラクタを使う
オブジェクト生成のための手段を複数用意できる。
class ID {
private _value: string
private constructor(v: string){
if (!v) {
throw new Error("err")
}
this._value = v
}
static FromString(v: string): ID {
return new ID(v)
}
static FromNumber(v: number): ID {
if (v <= 0) { // この辺の検証はサンプルのため雑に書いている。
throw new Error("err")
}
return new ID(String(v))
}
}
ドメイン固有の名前で生成できる。
class ID_Generator {
private _value: string
private constructor(v: string){
if (!v) {
throw new Error("err")
}
this._value = v
}
static generate() {
const rand = "1" // 何かしらランダムに生成する
return new ID_Generator(rand)
}
}
3.10 プロパティフィラーを使用しない
オブジェクトの内部が公開されている例
class Position {
private x : number
private y : number
constructor(x: number = 0, y: number = 0) {
this.x = x
this.y = y
}
public static fromArr(data: {'x': number, 'y': number}): Position {
let position = new Position()
position.x = data['x'] // ここでクラス内部にアクセスしてしまっている!!!!
position.y = data['y'] // ここでクラス内部にアクセスしてしまっている!!!!
return position
}
}
Discussion