32
The Open/Closed Principle Agile Thailand 2014

Kata:: Open Closed Principle

Embed Size (px)

DESCRIPTION

Kata Open/Closed Principle ในงาน Agile Thailand 2014

Citation preview

Page 1: Kata:: Open Closed Principle

The Open/Closed PrincipleAgile Thailand 2014

Page 2: Kata:: Open Closed Principle

Pairs

Page 3: Kata:: Open Closed Principle

เรมตนกบ FizzBuzz

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz

ถาตวเลขหาร 3 ลงตว แสดงคาวา Fizz ถาตวเลขหาร 5 ลงตว แสดงคาวา Buzz

ถาตวเลขหาร 3 และ 5 ลงตว แสดงคาวา FizzBuzz วนอนๆ แสดงคาเลขนนๆ

Page 4: Kata:: Open Closed Principle

มนงายเกนไปนะpublic String say(Integer number) { if( isFizz( number ) && isBuzz( number ) ) { return “FizzBuzz”; } if( isFizz( number ) ) { return “Fizz”; } if( isBuzz( number ) ) { return “Buzz”; } return number.toString();} private boolean isFizz(Integer number) { return number % 3 == 0;}

Page 5: Kata:: Open Closed Principle

ลองเพม Requirement หนอย

ถาตวเลขหาร7 ลงตว แสดงคาวา Bang

Page 6: Kata:: Open Closed Principle

มนกงายนะpublic String say(Integer number) { if( isBang( number ) ) { return “Bang”; } if( isFizz( number ) && isBuzz( number ) ) { return “FizzBuzz”; } if( isFizz( number ) ) { return “Fizz”; } if( isBuzz( number ) ) { return “Buzz”; } return number.toString();}

Page 7: Kata:: Open Closed Principle

แตยงกอน … ตองการแบบน

ถาตวเลขหาร 3 และ 7 ลงตว แสดงคาวา FizzBang ถาตวเลขหาร 5 และ 7 ลงตว แสดงคาวา BuzzBang

ถาตวเลขหาร 3, 5 และ 7 ลงตว แสดงคาวา FizzBuzzBang

Page 8: Kata:: Open Closed Principle

วธการทไมควรทา !!!public String say(Integer number) { if( isFizz( number ) && isBuzz( number ) && isBang( number ) ) { return “FizzBuzzBang” } if( isBuzz( number ) && isBang( number ) ) { return “BuzzBang”; } if( isFizz( number ) && isBang( number ) ) { return “FizzBang”; } … …}

นคอวธการทดแลวหรอ ?

ทกๆ ครงทมการเพม หรอ แกไขความตองการจากลกคาคณทำแบบนหรอ ?

Page 9: Kata:: Open Closed Principle

มคนบอกวาการเพม IF เขาไป มนคอการสรางปศาจขนมา

http://www.antiifcampaign.com/

Page 10: Kata:: Open Closed Principle

The Open/Closed Principle

วนการทางานตางๆ ของ Software เน class, module, function และวนอนๆ

ควรจะ เปด าหรบการเพมหรอขยาย

แต ปด าหรบการแกไข

Page 11: Kata:: Open Closed Principle

เราสราง feature อยางไร

Page 12: Kata:: Open Closed Principle

แนวทางการเพม feature

• คณสามารถทาการแกไขเฉพาะ ตอนการสราง object และสราง class ใหมขนมาเทานน ? • ถาสามารถทาได แสดงวาระบบดละ • ถาไม ใหทาการ refactor จนกวาจะทาได

Page 13: Kata:: Open Closed Principle

กฎของ OCP Kata1. เขยน Fail test 2. เขยน code เพอสราง object ขนมา ทาให test ผาน

1. เนการสราง Factory class าหรบสราง object 2. ไมม if-else

3. เขยน Fail test เพมอก 4. สามารถเขยน code ใหผานดวยการเปลยนแปลง code ใน Factory

หรอทาการสราง class ใหมหรอไม 1. ถา ใ กลบไปทาขอ 3 2. ถา ไม ใหทาการ refactor code จนกระทงทาขอ 4 ได

Page 14: Kata:: Open Closed Principle

เรม coding กนดกวา

Page 15: Kata:: Open Closed Principle

Test case ท 1

say(1) return 1 say(2) return 2

Page 16: Kata:: Open Closed Principle

Test case ท 2

say(3) return “Fizz” say(6) return “Fizz”

Page 17: Kata:: Open Closed Principle

Test case ท 3

say(5) return “Buzz” say(10) return “Buzz”

Page 18: Kata:: Open Closed Principle

Test case ท 4

say(3*5) return “FizzBuzz”

Page 19: Kata:: Open Closed Principle

Test case ท 5

say(7) return “Bang” say(14) return “Bang”

Page 20: Kata:: Open Closed Principle

Test case สดทาย

say(3*7) return “FizzBang” say(5*7) return “BuzzBang”

say(3*5*7) return “FizzBuzzBang”

Page 21: Kata:: Open Closed Principle

เอามาโชวหนอย

Page 22: Kata:: Open Closed Principle

Test case ท 1

Page 23: Kata:: Open Closed Principle
Page 24: Kata:: Open Closed Principle
Page 25: Kata:: Open Closed Principle

Test case ท 2

Page 26: Kata:: Open Closed Principle
Page 27: Kata:: Open Closed Principle
Page 28: Kata:: Open Closed Principle
Page 29: Kata:: Open Closed Principle
Page 30: Kata:: Open Closed Principle

าหรบ Test case อนๆ

https://github.com/up1/kata_fizzbuzz_ocp

Page 31: Kata:: Open Closed Principle

ขอคดสะกดใจ

1. กอนทจะทาการ code ตองคดวาจะสราง feature ใหงายไดอยางไร 2. กอนทจะ refactor ตอง คด และ วางแผน 3. ทาการ Refactor ตอนท test ผานทงหมด 4. ถาแกไขแลวงง แนะนาใหใ Ctrl+Z ไปจนกวา test จะผาน 5. เมอตองการเพม feature ใหม ใหเพมในวนขยายเทานน

Page 32: Kata:: Open Closed Principle

เรมตนกนใหม …