Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

タイプスクリプトでドメインオブジェクトやってみた

$
0
0

読んだ
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法 Kindle版

成果物1
classShippingCost{readonlybasePrice:number;readonlyMINIMUM_FOR_FREE=3000readonlyCOST=500constructor(basePrice:number){this.basePrice=basePrice}amount():number{if(this.basePrice<this.MINIMUM_FOR_FREE)returnthis.COSTreturn0}}constABOVE_THRESHOLD:number=5000constBELOW_THRESHOLD:number=300constabove_threshold_cost:ShippingCost=newShippingCost(ABOVE_THRESHOLD)console.log(above_threshold_cost.amount())// -> 0// 3000円以上の注文なので送料0円constbelow_threshold_cost:ShippingCost=newShippingCost(BELOW_THRESHOLD)console.log(below_threshold_cost.amount())// -> 500// 3000円未満の注文なので送料500円

送料のみを求めるクラス
外側から送料を変更できない(readonly)


成果物2
classQuantity{readonlyMIN:number=1readonlyMAX:number=100readonlyquantity:numberconstructor(quantity:number){if(quantity<this.MIN)thrownewRangeError("不正:"+this.MIN+"未満")if(quantity>this.MAX)thrownewRangeError("不正:"+this.MAX+"超過")this.quantity=quantity}canAdd(quantity:Quantity){constadded:number=this.addValue(quantity)returnadded<=this.MAX}add(quantity:Quantity){if(!this.canAdd(quantity))thrownewRangeError("不正:合計が"+this.MAX+"超過")constadded:number=this.addValue(quantity)returnnewQuantity(added)}privateaddValue(quantity:Quantity){// privateはちょっとprivateらしいreturnthis.quantity+quantity.quantity}}constaddedQuantity:Quantity=newQuantity(40)console.log(addedQuantity.quantity)letbelow:Quantity=newQuantity(50)console.log(addedQuantity.canAdd(below))// -> trueletabove:Quantity=newQuantity(90)console.log(addedQuantity.canAdd(above))// -> falseaddedQuantity.add(below)// readonlyなので変更が行われない(エラーが出ないのは良くないと思った)console.log(addedQuantity.quantity)// -> 40

値が範囲内に収まるか?or値を追加するクラス
しきい値の変更ができない(readonly)
初期化時に範囲外ならエラー

readonlyquantity:numberquantity:number

変更すれば、MAXまでは追加できるが、超過するとエラー


細かく区切れば、変更しやすいとか利点がある。
意識していきたい。
極端に言えば以下でも成り立つわけで、、、意識していきたい

classQuantity{quantity:numberconstructor(quantity:number){this.quantity=quantity}}

Viewing all articles
Browse latest Browse all 8691

Trending Articles