Soumettre la recherche
Mettre en ligne
Kata:: Open Closed Principle
•
10 j'aime
•
3,888 vues
Somkiat Puisungnoen
Suivre
Kata Open/Closed Principle ในงาน Agile Thailand 2014
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 32
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
o kapodistrias os kyvernitis tis elladas
o kapodistrias os kyvernitis tis elladas
Χαράλαμπος Γαρίτατζης
聖經中的金錢觀(十一)不成功的成功神學
聖經中的金錢觀(十一)不成功的成功神學
Jian-Yu Fisher Ke
μαρτίνος λούθηρος
μαρτίνος λούθηρος
Καπετανάκης Γεώργιος
約翰福音第2章(上)
約翰福音第2章(上)
查經簡報分享
A' Βιομηχανική Επανάσταση
A' Βιομηχανική Επανάσταση
Elvira Athanasopoulou
Eθνικά κινήματα στη νοτιοανατολική ευρώπη
Eθνικά κινήματα στη νοτιοανατολική ευρώπη
Tania Apostolopoulou
η μεταπολεμική οργάνωση της διεθνούς κοινωνίας
η μεταπολεμική οργάνωση της διεθνούς κοινωνίας
Tania Apostolopoulou
διπολικός κόσμος ίδρυση ΟΗΕ
διπολικός κόσμος ίδρυση ΟΗΕ
Πηνελόπη Ρασιδάκη
Recommandé
o kapodistrias os kyvernitis tis elladas
o kapodistrias os kyvernitis tis elladas
Χαράλαμπος Γαρίτατζης
聖經中的金錢觀(十一)不成功的成功神學
聖經中的金錢觀(十一)不成功的成功神學
Jian-Yu Fisher Ke
μαρτίνος λούθηρος
μαρτίνος λούθηρος
Καπετανάκης Γεώργιος
約翰福音第2章(上)
約翰福音第2章(上)
查經簡報分享
A' Βιομηχανική Επανάσταση
A' Βιομηχανική Επανάσταση
Elvira Athanasopoulou
Eθνικά κινήματα στη νοτιοανατολική ευρώπη
Eθνικά κινήματα στη νοτιοανατολική ευρώπη
Tania Apostolopoulou
η μεταπολεμική οργάνωση της διεθνούς κοινωνίας
η μεταπολεμική οργάνωση της διεθνούς κοινωνίας
Tania Apostolopoulou
διπολικός κόσμος ίδρυση ΟΗΕ
διπολικός κόσμος ίδρυση ΟΗΕ
Πηνελόπη Ρασιδάκη
Robot Framework :: Demo login application
Robot Framework :: Demo login application
Somkiat Puisungnoen
Sprint3 r unit-test
Sprint3 r unit-test
Somkiat Puisungnoen
Stad G E N K
Stad G E N K
Socius - steunpunt sociaal-cultureel werk
Better Support for Functional Programming in Angular 2
Better Support for Functional Programming in Angular 2
Viktor Savkin
De rol van hun leven - Unie der Zorgelozen
De rol van hun leven - Unie der Zorgelozen
Socius - steunpunt sociaal-cultureel werk
Heemkunde Vlaanderen
Heemkunde Vlaanderen
Socius - steunpunt sociaal-cultureel werk
Git 101 for_tarad_dev
Git 101 for_tarad_dev
Somkiat Puisungnoen
Inheritance
Inheritance
ramlal1974
Roaming Analytics Platform V1.1
Roaming Analytics Platform V1.1
Jack Brown
Van Alfapret Tot Vogelzang (Socius)
Van Alfapret Tot Vogelzang (Socius)
Socius - steunpunt sociaal-cultureel werk
Kunst op het Hof
Kunst op het Hof
Socius - steunpunt sociaal-cultureel werk
Beleidsplanning voor bewegingen
Beleidsplanning voor bewegingen
Socius - steunpunt sociaal-cultureel werk
Lordi Lana
Lordi Lana
inigoaranbarri
PROEXPOSURE Photographer: Betelhem Abate
PROEXPOSURE Photographer: Betelhem Abate
PROEXPOSURE CIC
Hs Classroom Guidelines
Hs Classroom Guidelines
jaspang
Архивное хранение документов в условиях электронного документооборота
Архивное хранение документов в условиях электронного документооборота
Natasha Khramtsovsky
Protecting Sensitive Data using Encryption and Key Management
Protecting Sensitive Data using Encryption and Key Management
Stuart Marsh
Ud Arte
Ud Arte
Ángel Fresneda
JCCS Online Survey Results
JCCS Online Survey Results
mrounds5
Tech Award Presentation, 2011
Tech Award Presentation, 2011
Aditya Varun Chadha
Next of Java 2022
Next of Java 2022
Somkiat Puisungnoen
Sck spring-reactive
Sck spring-reactive
Somkiat Puisungnoen
Contenu connexe
En vedette
Robot Framework :: Demo login application
Robot Framework :: Demo login application
Somkiat Puisungnoen
Sprint3 r unit-test
Sprint3 r unit-test
Somkiat Puisungnoen
Stad G E N K
Stad G E N K
Socius - steunpunt sociaal-cultureel werk
Better Support for Functional Programming in Angular 2
Better Support for Functional Programming in Angular 2
Viktor Savkin
De rol van hun leven - Unie der Zorgelozen
De rol van hun leven - Unie der Zorgelozen
Socius - steunpunt sociaal-cultureel werk
Heemkunde Vlaanderen
Heemkunde Vlaanderen
Socius - steunpunt sociaal-cultureel werk
Git 101 for_tarad_dev
Git 101 for_tarad_dev
Somkiat Puisungnoen
Inheritance
Inheritance
ramlal1974
Roaming Analytics Platform V1.1
Roaming Analytics Platform V1.1
Jack Brown
Van Alfapret Tot Vogelzang (Socius)
Van Alfapret Tot Vogelzang (Socius)
Socius - steunpunt sociaal-cultureel werk
Kunst op het Hof
Kunst op het Hof
Socius - steunpunt sociaal-cultureel werk
Beleidsplanning voor bewegingen
Beleidsplanning voor bewegingen
Socius - steunpunt sociaal-cultureel werk
Lordi Lana
Lordi Lana
inigoaranbarri
PROEXPOSURE Photographer: Betelhem Abate
PROEXPOSURE Photographer: Betelhem Abate
PROEXPOSURE CIC
Hs Classroom Guidelines
Hs Classroom Guidelines
jaspang
Архивное хранение документов в условиях электронного документооборота
Архивное хранение документов в условиях электронного документооборота
Natasha Khramtsovsky
Protecting Sensitive Data using Encryption and Key Management
Protecting Sensitive Data using Encryption and Key Management
Stuart Marsh
Ud Arte
Ud Arte
Ángel Fresneda
JCCS Online Survey Results
JCCS Online Survey Results
mrounds5
Tech Award Presentation, 2011
Tech Award Presentation, 2011
Aditya Varun Chadha
En vedette
(20)
Robot Framework :: Demo login application
Robot Framework :: Demo login application
Sprint3 r unit-test
Sprint3 r unit-test
Stad G E N K
Stad G E N K
Better Support for Functional Programming in Angular 2
Better Support for Functional Programming in Angular 2
De rol van hun leven - Unie der Zorgelozen
De rol van hun leven - Unie der Zorgelozen
Heemkunde Vlaanderen
Heemkunde Vlaanderen
Git 101 for_tarad_dev
Git 101 for_tarad_dev
Inheritance
Inheritance
Roaming Analytics Platform V1.1
Roaming Analytics Platform V1.1
Van Alfapret Tot Vogelzang (Socius)
Van Alfapret Tot Vogelzang (Socius)
Kunst op het Hof
Kunst op het Hof
Beleidsplanning voor bewegingen
Beleidsplanning voor bewegingen
Lordi Lana
Lordi Lana
PROEXPOSURE Photographer: Betelhem Abate
PROEXPOSURE Photographer: Betelhem Abate
Hs Classroom Guidelines
Hs Classroom Guidelines
Архивное хранение документов в условиях электронного документооборота
Архивное хранение документов в условиях электронного документооборота
Protecting Sensitive Data using Encryption and Key Management
Protecting Sensitive Data using Encryption and Key Management
Ud Arte
Ud Arte
JCCS Online Survey Results
JCCS Online Survey Results
Tech Award Presentation, 2011
Tech Award Presentation, 2011
Plus de Somkiat Puisungnoen
Next of Java 2022
Next of Java 2022
Somkiat Puisungnoen
Sck spring-reactive
Sck spring-reactive
Somkiat Puisungnoen
Part 2 :: Spring Boot testing
Part 2 :: Spring Boot testing
Somkiat Puisungnoen
vTalk#1 Microservices with Spring Boot
vTalk#1 Microservices with Spring Boot
Somkiat Puisungnoen
Lesson learned from React native and Flutter
Lesson learned from React native and Flutter
Somkiat Puisungnoen
devops
devops
Somkiat Puisungnoen
Angular :: basic tuning performance
Angular :: basic tuning performance
Somkiat Puisungnoen
Shared code between projects
Shared code between projects
Somkiat Puisungnoen
Distributed Tracing
Distributed Tracing
Somkiat Puisungnoen
Manage data of service
Manage data of service
Somkiat Puisungnoen
RobotFramework Meetup at Thailand #2
RobotFramework Meetup at Thailand #2
Somkiat Puisungnoen
Visual testing
Visual testing
Somkiat Puisungnoen
Cloud Native App
Cloud Native App
Somkiat Puisungnoen
Wordpress for Newbie
Wordpress for Newbie
Somkiat Puisungnoen
Sck Agile in Real World
Sck Agile in Real World
Somkiat Puisungnoen
Clean you code
Clean you code
Somkiat Puisungnoen
SCK Firestore at CNX
SCK Firestore at CNX
Somkiat Puisungnoen
Unhappiness Developer
Unhappiness Developer
Somkiat Puisungnoen
The Beauty of BAD code
The Beauty of BAD code
Somkiat Puisungnoen
React in the right way
React in the right way
Somkiat Puisungnoen
Plus de Somkiat Puisungnoen
(20)
Next of Java 2022
Next of Java 2022
Sck spring-reactive
Sck spring-reactive
Part 2 :: Spring Boot testing
Part 2 :: Spring Boot testing
vTalk#1 Microservices with Spring Boot
vTalk#1 Microservices with Spring Boot
Lesson learned from React native and Flutter
Lesson learned from React native and Flutter
devops
devops
Angular :: basic tuning performance
Angular :: basic tuning performance
Shared code between projects
Shared code between projects
Distributed Tracing
Distributed Tracing
Manage data of service
Manage data of service
RobotFramework Meetup at Thailand #2
RobotFramework Meetup at Thailand #2
Visual testing
Visual testing
Cloud Native App
Cloud Native App
Wordpress for Newbie
Wordpress for Newbie
Sck Agile in Real World
Sck Agile in Real World
Clean you code
Clean you code
SCK Firestore at CNX
SCK Firestore at CNX
Unhappiness Developer
Unhappiness Developer
The Beauty of BAD code
The Beauty of BAD code
React in the right way
React in the right way
Kata:: Open Closed Principle
1.
The Open/Closed Principle Agile
Thailand 2014
2.
Pairs
3.
เริ่มต้นกับ 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 ่วนอื่นๆ แสดงค่าเลขนั้นๆ
4.
มันง่ายเกินไปนะ 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; }
5.
ลองเพิ่ม Requirement หน่อย ถ้าตัวเลขหาร7
ลงตัว แสดงคําว่า Bang
6.
มันก็ง่ายนะ 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(); }
7.
แต่ยังก่อน … ต้องการแบบนี้ ถ้าตัวเลขหาร
3 และ 7 ลงตัว แสดงคําว่า FizzBang ถ้าตัวเลขหาร 5 และ 7 ลงตัว แสดงคําว่า BuzzBang ถ้าตัวเลขหาร 3, 5 และ 7 ลงตัว แสดงคําว่า FizzBuzzBang
8.
วิธีการที่ไม่ควรทํา !!! 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”; } … … } นี่คือวิธีการที่ดีแล้วหรือ ? ทุกๆ ครั้งที่มีการเพิ่ม หรือ แก้ไขความต้องการจากลูกค้า คุณทำแบบนี้หรือ ?
9.
มีคนบอกว่า การเพิ่ม IF เข้าไป
มันคือการสร้างปีศาจขึ้นมา http://www.antiifcampaign.com/
10.
The Open/Closed Principle ่วนการทํางานต่างๆ
ของ Software เ่น class, module, function และ่วนอื่นๆ ควรจะ เปิด ําหรับการเพิ่มหรือขยาย แต่ ปิด ําหรับการแก้ไข
11.
เราสร้าง feature อย่างไร
12.
แนวทางการเพิ่ม feature • คุณสามารถทําการแก้ไขเฉพาะ
ตอนการสร้าง object และสร้าง class ใหม่ขึ้นมาเท่านั้น ? • ถ้าสามารถทําได้ แสดงว่าระบบดีล่ะ • ถ้าไม่ ให้ทําการ refactor จนกว่าจะทําได้
13.
กฎของ OCP Kata 1.
เขียน 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 ได้
14.
เริ่ม coding กันดีกว่า
15.
Test case ที่
1 say(1) return 1 say(2) return 2
16.
Test case ที่
2 say(3) return “Fizz” say(6) return “Fizz”
17.
Test case ที่
3 say(5) return “Buzz” say(10) return “Buzz”
18.
Test case ที่
4 say(3*5) return “FizzBuzz”
19.
Test case ที่
5 say(7) return “Bang” say(14) return “Bang”
20.
Test case สุดท้าย say(3*7)
return “FizzBang” say(5*7) return “BuzzBang” say(3*5*7) return “FizzBuzzBang”
21.
เอามาโชว์หน่อยิ
22.
Test case ที่
1
23.
24.
25.
Test case ที่
2
26.
27.
28.
29.
30.
ําหรับ Test case
อื่นๆ https://github.com/up1/kata_fizzbuzz_ocp
31.
ข้อคิดสะกิดใจ 1. ก่อนที่จะทําการ code
ต้องคิดว่าจะสร้าง feature ให้ง่ายได้อย่างไร 2. ก่อนที่จะ refactor ต้อง คิด และ วางแผน 3. ทําการ Refactor ตอนที่ test ผ่านทั้งหมด 4. ถ้าแก้ไขแล้วงง แนะนําให้ใ้ Ctrl+Z ไปจนกว่า test จะผ่าน 5. เมื่อต้องการเพิ่ม feature ใหม่ ให้เพิ่มใน่วนขยายเท่านั้น
32.
เริ่มต้นกันใหม่ …
Télécharger maintenant