kata:: open closed principle
DESCRIPTION
Kata Open/Closed Principle ในงาน Agile Thailand 2014TRANSCRIPT
![Page 1: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/1.jpg)
The Open/Closed PrincipleAgile Thailand 2014
![Page 2: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/2.jpg)
Pairs
![Page 3: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/3.jpg)
เรมตนกบ 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](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/4.jpg)
มนงายเกนไปนะ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](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/5.jpg)
ลองเพม Requirement หนอย
ถาตวเลขหาร7 ลงตว แสดงคาวา Bang
![Page 6: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/6.jpg)
มนกงายนะ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](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/7.jpg)
แตยงกอน … ตองการแบบน
ถาตวเลขหาร 3 และ 7 ลงตว แสดงคาวา FizzBang ถาตวเลขหาร 5 และ 7 ลงตว แสดงคาวา BuzzBang
ถาตวเลขหาร 3, 5 และ 7 ลงตว แสดงคาวา FizzBuzzBang
![Page 8: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/8.jpg)
วธการทไมควรทา !!!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](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/9.jpg)
มคนบอกวาการเพม IF เขาไป มนคอการสรางปศาจขนมา
http://www.antiifcampaign.com/
![Page 10: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/10.jpg)
The Open/Closed Principle
วนการทางานตางๆ ของ Software เน class, module, function และวนอนๆ
ควรจะ เปด าหรบการเพมหรอขยาย
แต ปด าหรบการแกไข
![Page 11: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/11.jpg)
เราสราง feature อยางไร
![Page 12: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/12.jpg)
แนวทางการเพม feature
• คณสามารถทาการแกไขเฉพาะ ตอนการสราง object และสราง class ใหมขนมาเทานน ? • ถาสามารถทาได แสดงวาระบบดละ • ถาไม ใหทาการ refactor จนกวาจะทาได
![Page 13: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/13.jpg)
กฎของ 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](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/14.jpg)
เรม coding กนดกวา
![Page 15: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/15.jpg)
Test case ท 1
say(1) return 1 say(2) return 2
![Page 16: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/16.jpg)
Test case ท 2
say(3) return “Fizz” say(6) return “Fizz”
![Page 17: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/17.jpg)
Test case ท 3
say(5) return “Buzz” say(10) return “Buzz”
![Page 18: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/18.jpg)
Test case ท 4
say(3*5) return “FizzBuzz”
![Page 19: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/19.jpg)
Test case ท 5
say(7) return “Bang” say(14) return “Bang”
![Page 20: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/20.jpg)
Test case สดทาย
say(3*7) return “FizzBang” say(5*7) return “BuzzBang”
say(3*5*7) return “FizzBuzzBang”
![Page 21: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/21.jpg)
เอามาโชวหนอย
![Page 22: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/22.jpg)
Test case ท 1
![Page 23: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/23.jpg)
![Page 24: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/24.jpg)
![Page 25: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/25.jpg)
Test case ท 2
![Page 26: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/26.jpg)
![Page 27: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/27.jpg)
![Page 28: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/28.jpg)
![Page 29: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/29.jpg)
![Page 30: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/30.jpg)
าหรบ Test case อนๆ
https://github.com/up1/kata_fizzbuzz_ocp
![Page 31: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/31.jpg)
ขอคดสะกดใจ
1. กอนทจะทาการ code ตองคดวาจะสราง feature ใหงายไดอยางไร 2. กอนทจะ refactor ตอง คด และ วางแผน 3. ทาการ Refactor ตอนท test ผานทงหมด 4. ถาแกไขแลวงง แนะนาใหใ Ctrl+Z ไปจนกวา test จะผาน 5. เมอตองการเพม feature ใหม ใหเพมในวนขยายเทานน
![Page 32: Kata:: Open Closed Principle](https://reader034.vdocuments.site/reader034/viewer/2022051314/54b70b034a79594a478b471c/html5/thumbnails/32.jpg)
เรมตนกนใหม …