Kata:: Open Closed Principle
-
Upload
somkiat-puisungnoen -
Category
Technology
-
view
2.223 -
download
1
description
Transcript of Kata:: Open Closed Principle
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 ใหม ใหเพมในวนขยายเทานน
เรมตนกนใหม …