Kata:: Open Closed Principle

Preview:

DESCRIPTION

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

Citation preview

The Open/Closed PrincipleAgile Thailand 2014

Pairs

เรมตนกบ 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 วนอนๆ แสดงคาเลขนนๆ

มนงายเกนไปนะ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;}

ลองเพม Requirement หนอย

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

มนกงายนะ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();}

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

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

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

วธการทไมควรทา !!!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”; } … …}

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

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

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

http://www.antiifcampaign.com/

The Open/Closed Principle

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

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

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

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

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

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

กฎของ 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 ได

เรม coding กนดกวา

Test case ท 1

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

Test case ท 2

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

Test case ท 3

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

Test case ท 4

say(3*5) return “FizzBuzz”

Test case ท 5

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

Test case สดทาย

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

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

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

Test case ท 1

Test case ท 2

าหรบ Test case อนๆ

https://github.com/up1/kata_fizzbuzz_ocp

ขอคดสะกดใจ

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

เรมตนกนใหม …

Recommended