Բիզնեսի սահմանափակումները կարևոր դեր են խաղում մոդելի ձևավորման մեջ: Նրանք հաճախ հայտնվում են անուղղակիորեն, և դրանց բացահայտ արտահայտումը կարող է զգալիորեն բարելավել դիզայնը:
Դոմենների վրա հիմնված նախագծման մեջ (DDD) սովորական է բիզնեսի սահմանափակումները դասավորել մեթոդների մեջ՝ ապահովելու համար, որ դրանք հետևողականորեն կիրառվեն հավելվածի ողջ ընթացքում:
Օրինակ
Ահա մի օրինակ, թե ինչպես կարող եք հաշվի առնել բիզնեսի սահմանափակումը Գոլանգի մեթոդի մեջ.
Նախքան գործոնը՝
type Order struct { ID int CustomerID int TotalAmount float64 } func (o *Order) AddItem(item Item) error { if o.TotalAmount+item.Price > 1000 { return fmt.Errorf("order total amount cannot exceed 1000") } // add item to order o.TotalAmount += item.Price return nil }
Այս օրինակում մենք ունենք Order
struct, որն ունի AddItem
մեթոդ: AddItem
մեթոդը վերցնում է Item
-ը որպես պարամետր և ավելացնում այն պատվերին: Այնուամենայնիվ, նախքան տարրը ավելացնելը, մեթոդը ստուգում է, թե արդյոք ապրանքը ավելացնելու դեպքում պատվերի ընդհանուր գումարը կգերազանցի 1000-ը: Եթե այդպես լինի, մեթոդը վերադարձնում է սխալ:
Հիմա եկեք վերամշակենք այն:
Հետո գործոն՝
type Order struct { ID int CustomerID int TotalAmount float64 } func (o *Order) AddItem(item Item) error { if err := o.checkTotalAmount(item.Price); err != nil { return err } // add item to order o.TotalAmount += item.Price return nil } func (o *Order) checkTotalAmount(price float64) error { if o.TotalAmount+price > 1000 { return fmt.Errorf("order total amount cannot exceed 1000") } return nil }
Այս թարմացված տարբերակում մենք ունենք նոր մեթոդ, որը կոչվում է checkTotalAmount
, որը ստուգում է, թե արդյոք պատվերին որևէ ապրանք ավելացնելու դեպքում ընդհանուր գումարը կգերազանցի 1000-ը:
Սահմանափակումների ստուգումն իր սեփական մեթոդով բաժանելը կոդն ավելի մոդուլային է դարձնում և ավելի հեշտ է պահպանել: Եթե ապագայում մեզ անհրաժեշտ է փոխել սահմանափակումը, մենք միայն պետք է փոփոխենք checkTotalAmount
մեթոդը: