Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Design Patterns @PyCon APAC 2022

Max Lai
August 22, 2022

Python Design Patterns @PyCon APAC 2022

This is the slides of my sharing, "Python Design Pattern," at PyCon APAC 2022.

Max Lai

August 22, 2022

Transcript

52 slides
  1. About Me • Max Lai • Senior Manager of Info.

    Tech. Dept. @Tungs' Taichung MetroHarbor Hospital • Tech Lead of Intelligent Healthcare Application • Community • Co-organizer of Taichung.py since June 2014 • Organizer of the Agile Taichung, 2014~2018 • Host of Agile Tour Taichung, 2015~2018
  2. Outline • What Are Design Patterns • Case Study: A

    Reusable Medical Form Module • Design Patterns in Python • Q&A Demo Program : github.com/cclai999/pyconapac22-dp
  3. The Birth of Patterns Each pattern is a three-part rule,

    which express a relation between a certain context, a problem, and a solution.
  4. A pattern is a proven solution to a problem in

    a context. Software Design Pattern Source: https://wiki.c2.com/?PatternDefinitionThread
  5. Why Design Patterns • Design patterns help with reuse and

    communication • Reuse solutions : do not have to reinvent solutions for commonly recurring problems • Establish common terminology : provide a common point of reference during the analysis and design phase of a project • Design patterns give a higher perspective on analysis and design • This frees you from the tyranny of dealing with the details too early Source: Design Patterns Explained: A New Perspective on Object-Oriented Design, 2nd ed.
  6. Design Pattern Descriptions • Name • Intent, problem and context

    • Solution, implementation guidelines • Participants and collaborators • Positive and negative consequences Pattern descriptions are often independent of programming language or implementation details
  7. Design Patterns Catalog <<GOF>> Creational patterns Structural patterns Behavioral patterns

    • Factory Method • Abstract Factory • Builder • Prototype • Singleton • Adapter • Bridge • Composite • Decorator • Facade • Flyweight • Proxy • Chain of Responsibility • Interpreter • Iterator • Mediator • Memento • Observer • State • Strategy • Template Method • Visitor
  8. Principles for Creating Good OO Design • Program to an

    interface, not an implementation • Favor object composition over class inheritance
  9. Thinking in Design Patterns • Context first (design from context)

    • Building by adding distinctions • One pattern at a time • Encapsulate variations in classes Source: Design Patterns Explained: A New Perspective on Object-Oriented Design, 2nd ed.
  10. Workers’ Physical and Health Examination Record Form • Workers’ Physical

    and Health Examination Record Form 勞工一般/特殊特殊體格及健康檢查紀錄 • Occupational Safety and Health Administration, Ministry of Labor (勞 動部職業安全衛生署) • https://www.osha.gov.tw/1106/29647/1141/13440/ • There are total 33 forms in this case • In fact, there are thousands of forms in a hospital
  11. Sample Form in Case Study 勞⼯⼀般體格及健康檢查紀錄 1.姓名:__________ 2.性別:□男 □⼥ 3.檢查日期:___年___月___日

    4.是否需輪班: □是 ( □兩班制 □三班制 □四班制 □其他:_____ ) □否 5.您是否曾患有下列慢性疾病:(請在適當項目前打勾) □⾼⾎壓 □糖尿病 □⼼臟病 □癌症____ □其他慢性病____ □以上皆無
  12. Composite Pattern • Compose objects into tree structures to represent

    part-whole hierarchies. • Composite lets clients treat individual objects and compositions of objects uniformly.
  13. Factory Method • Define an interface for creating an object,

    • but let subclasses decide which class to instantiate. • Defer instantiation to subclasses.
  14. Call factory to create “Sheet” object Call factory to create

    “InputText” object Call factory to create “CheckGroup” object Append to input_items “Option” object Append to input_items “Option” object
  15. Output JSON Data The backend send JSON data to the

    frontend Form rendered by Vue.js
  16. Mixin • Use Mixins for Code Reuse • a mixin

    does not define a new type; • it merely bundles methods for reuse • Make Mixins Explicit by Naming • named with a ...Mixin suffix • e.g. JsonMixin in case study
  17. Output Text Format • People may not be able to

    connect to our website at the corporate medical examination site. • We need a paper form in this case.
  18. Visitor Pattern • Represent an operation to be performed on

    the elements of an object structure. • Visitor lets you define a new operation without changing the classes of the elements on which it operates.
  19. Visitor Pattern ① ② ③ ④ ⑬ ⑫ ⑪ ⑩

    ⑨ ⑧ ⑦ ⑥ ⑤ ⑲ ⑱ ⑰ ⑯ ⑮ ⑭ ⑳ ㉑
  20. Output Text by Visitor 勞工一般體格及健康檢查紀錄 姓名: _______ 性別[單選]:( )男( )女

    檢查日期:___年___月___日 是否需輪班[單選]: ( )是[單選]:( )兩班制( )三班制( )四班制( )其他 _______ ( )否 您是否曾患有下列慢性疾病[多選]: 【 】高血壓 【 】糖尿病 【 】心臟病 【 】癌症 _______ 【 】以上皆無
  21. Design Pattern in Dynamic Languages • Peter Norvig states that

    16 out of the 23 patterns in the original Design Patterns book become either “invisible or simpler” in a dynamic language (slide 9) • “Design Patterns in Dynamic Languages” (1996) Source: http://norvig.com/design-patterns/design-patterns.pdf
  22. First Class Object • Functions in Python are first-class objects.

    • A “first-class object” as a program entity that can be: • created at runtime; • assigned to a variable or element in a data structure; • passed as an argument to a function; • returned as the result of a function. Source: Fluent Python, 2nd edition
  23. Function-Oriented Strategy “”“5% discount for customers with 1000 or more

    fidelity points""" """10% discount for each LineItem with 20 or more units""" """7% discount for orders with 10 or more distinct items"""
  24. Modules are “Singletons” in Python • import only creates a

    single copy of each module • subsequent imports of the same name keep returning the same module object • Official Python FAQ[1]: using a module is also the basis for implementing the Singleton design pattern, for the same reason. [1] https://docs.python.org/3/faq/programming.html#how-do-i-share-global-variables-across-modules
  25. Key Takeaways What • Have a context • Solve a

    problem • Recur • Have a name Why • Reuse solutions • Establish common terminology • Give a higher perspective on design How • Context first • One pattern at a time • Encapsulate variations

More Decks by Max Lai

Other Decks in Programming