Suche senden
Hochladen
Kata:: Open Closed Principle
•
10 gefällt mir
•
3,887 views
Somkiat Puisungnoen
Folgen
Kata Open/Closed Principle ในงาน Agile Thailand 2014
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 32
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
8 клас урок 3
8 клас урок 3
al12309
micro:bit: Φύλλο Εργασίας 4 - Ερωτήσεις
micro:bit: Φύλλο Εργασίας 4 - Ερωτήσεις
Penelope Markellou
урок 8 об’єкти. властивості об’єктів, значення властивостей. об’єкти навколо ...
урок 8 об’єкти. властивості об’єктів, значення властивостей. об’єкти навколо ...
Сокальська ЗШ І-ІІІ ступенів №2
Scratch golikov 1
Scratch golikov 1
Sergiy Shydlovskyy
ενότητα 16η (αθλήματα σπορ)
ενότητα 16η (αθλήματα σπορ)
Giorgos Baroutas
Κύκλος ζωής εφαρμογών.
Κύκλος ζωής εφαρμογών.
iodalla
γεια σου ,κότσυφα
γεια σου ,κότσυφα
Ioanna Chats
2 клас урок 4 з чого складається комп’ютер
2 клас урок 4 з чого складається комп’ютер
Сокальська ЗШ І-ІІІ ступенів №2
Empfohlen
8 клас урок 3
8 клас урок 3
al12309
micro:bit: Φύλλο Εργασίας 4 - Ερωτήσεις
micro:bit: Φύλλο Εργασίας 4 - Ερωτήσεις
Penelope Markellou
урок 8 об’єкти. властивості об’єктів, значення властивостей. об’єкти навколо ...
урок 8 об’єкти. властивості об’єктів, значення властивостей. об’єкти навколо ...
Сокальська ЗШ І-ІІІ ступенів №2
Scratch golikov 1
Scratch golikov 1
Sergiy Shydlovskyy
ενότητα 16η (αθλήματα σπορ)
ενότητα 16η (αθλήματα σπορ)
Giorgos Baroutas
Κύκλος ζωής εφαρμογών.
Κύκλος ζωής εφαρμογών.
iodalla
γεια σου ,κότσυφα
γεια σου ,κότσυφα
Ioanna Chats
2 клас урок 4 з чого складається комп’ютер
2 клас урок 4 з чого складається комп’ютер
Сокальська ЗШ І-ІІІ ступенів №2
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
sveta7940
2 klas-ukrmova-kravcova-2019-1
2 klas-ukrmova-kravcova-2019-1
cgf gfgfg
Програма гуртка
Програма гуртка
Nataliya Pazina
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
Maria Froudaraki
Επιστροφή στα θρανία
Επιστροφή στα θρανία
teaghet
ασκησεισ ενεργητικησ παθητικησ 2
ασκησεισ ενεργητικησ παθητικησ 2
Nansy Tzg
A3 M3 GraphicalUserInterface
A3 M3 GraphicalUserInterface
papettas
8 клас урок 11
8 клас урок 11
pupilsShostka
Шкідливі фактори при роботі з комп’ютерами
Шкідливі фактори при роботі з комп’ютерами
Іра Демчан
Εκθεση: Μια περιπέτεα
Εκθεση: Μια περιπέτεα
Katerina Dervisi
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Василь Тереховський
Informatyka 8-klas-morze-2021
Informatyka 8-klas-morze-2021
kreidaros1
πίτσα κλάσματα
πίτσα κλάσματα
Roula Mple
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
Nagao Hiroaki
Ε΄ Δημοτικού Μαθηματικά.pdf
Ε΄ Δημοτικού Μαθηματικά.pdf
zohsschool
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
teaghet
Test for unit 4 english 5
Test for unit 4 english 5
tumurkhuu_od
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
Tsuyoshi Saito
Tα ισοδύναμα κλάσματα
Tα ισοδύναμα κλάσματα
Γιάννης Φερεντίνος
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
teaghet
Robot Framework :: Demo login application
Robot Framework :: Demo login application
Somkiat Puisungnoen
Sprint3 r unit-test
Sprint3 r unit-test
Somkiat Puisungnoen
Weitere ähnliche Inhalte
Was ist angesagt?
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
sveta7940
2 klas-ukrmova-kravcova-2019-1
2 klas-ukrmova-kravcova-2019-1
cgf gfgfg
Програма гуртка
Програма гуртка
Nataliya Pazina
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
Maria Froudaraki
Επιστροφή στα θρανία
Επιστροφή στα θρανία
teaghet
ασκησεισ ενεργητικησ παθητικησ 2
ασκησεισ ενεργητικησ παθητικησ 2
Nansy Tzg
A3 M3 GraphicalUserInterface
A3 M3 GraphicalUserInterface
papettas
8 клас урок 11
8 клас урок 11
pupilsShostka
Шкідливі фактори при роботі з комп’ютерами
Шкідливі фактори при роботі з комп’ютерами
Іра Демчан
Εκθεση: Μια περιπέτεα
Εκθεση: Μια περιπέτεα
Katerina Dervisi
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Василь Тереховський
Informatyka 8-klas-morze-2021
Informatyka 8-klas-morze-2021
kreidaros1
πίτσα κλάσματα
πίτσα κλάσματα
Roula Mple
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
Nagao Hiroaki
Ε΄ Δημοτικού Μαθηματικά.pdf
Ε΄ Δημοτικού Μαθηματικά.pdf
zohsschool
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
teaghet
Test for unit 4 english 5
Test for unit 4 english 5
tumurkhuu_od
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
Tsuyoshi Saito
Tα ισοδύναμα κλάσματα
Tα ισοδύναμα κλάσματα
Γιάννης Φερεντίνος
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
teaghet
Was ist angesagt?
(20)
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
Презентація:Практична робота №2. Історія засобів опрацювання інформаційних об...
2 klas-ukrmova-kravcova-2019-1
2 klas-ukrmova-kravcova-2019-1
Програма гуртка
Програма гуртка
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
ΚΛΑΣΜΑΤΑ ΓΙΑ Γ' ΤΑΞΗ
Επιστροφή στα θρανία
Επιστροφή στα θρανία
ασκησεισ ενεργητικησ παθητικησ 2
ασκησεισ ενεργητικησ παθητικησ 2
A3 M3 GraphicalUserInterface
A3 M3 GraphicalUserInterface
8 клас урок 11
8 клас урок 11
Шкідливі фактори при роботі з комп’ютерами
Шкідливі фактори при роботі з комп’ютерами
Εκθεση: Μια περιπέτεα
Εκθεση: Μια περιπέτεα
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Урок 51. Встановлення параметрів сторінки. Друкування електронної таблиці. Пр...
Informatyka 8-klas-morze-2021
Informatyka 8-klas-morze-2021
πίτσα κλάσματα
πίτσα κλάσματα
Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
Ε΄ Δημοτικού Μαθηματικά.pdf
Ε΄ Δημοτικού Μαθηματικά.pdf
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
O χάρτης - ΓΕΩΓΡΑΦΙΑ Ε΄ΔΗΜΟΤΙΚΟΥ
Test for unit 4 english 5
Test for unit 4 english 5
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
売りたいものがあるならば、まずはネットショップのCMSを開発しましょう
Tα ισοδύναμα κλάσματα
Tα ισοδύναμα κλάσματα
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
Μέγιστος κοινός διαιρέτης - Μ Κ Δ
Andere mochten auch
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
Andere mochten auch
(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
Mehr von 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
Mehr von 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.
เริ่มต้นกันใหม่ …
Jetzt herunterladen