72 Design Principles กับ 60 Software Architectural Tactics

ขอนำเสนอ 72 หลักการพื้นฐานการออกแบบซอฟต์แวร์ (Design Principles) และ 60 ชั้นเชิงทางสถาปัตยกรรมทั่วไป (General Architectural Tactics)

สำหรับ design principles ผมสรุปจากประสบการณ์ที่พบเจออยู่บ่อย ๆ โดยจำแนกเป็นหมวดหมู่ต่าง ๆ ซึ่งบางหลักการฯ ค่อนข้างคาบเกี่ยวมากกว่าหนึ่งหมวดหมู่พอสมควร เอาเป็นว่าไม่ต้องสนใจหมวดหมู่ที่ผมจำแนกนักละกันนะครับ เพราะผมรีบพิมพ์เลยไม่ได้อ้างอิงหลักวิชาการอะไร จำแนกโดยใช้วิจารณญาณล้วน ซึ่งบางหลักการฯ ก็ไม่เชิงเป็น design principles เสียทีเดียว แต่ขอรวบยอดมารวมด้วยกันเพราะเห็นว่าสำคัญและน่าจะไปด้วยกันได้ นอกจากนี้ผมยังนำ design principles จากงานออกแบบสถาปัตยกรรมก่อสร้างมาประกอบด้วย คือ harmony, balance, unity, contrast, emphasis, rhythm เพราะเห็นว่าสามารถประยุกต์กับงานออกแบบซอฟต์แวร์ได้ สำหรับ design principles และ general software architectural tactics ทั้งหมดที่นำมาเล่าสู่กันนั้น ในความจริงยังมีมากกว่านี้อีก ไว้มีโอกาสจะนำมาเล่าสู่เพิ่มเติมกัน เช่น หลักการพื้นฐานและชั้นเชิงการออกแบบด้าน security, interoperability, scalability, portability ฯลฯ หรือหลักการออกแบบซอฟต์แวร์เชิงพาณิชย์ (commercial software) ซึ่งมีหลากหลายกลเม็ดเด็ดพราย ^_^

สำหรับ general architectural tactics ทั้ง 60 ชั้นเชิง (tactic) ผมอ้างอิงจากหนังสือ ‘Software Architecture in Practice Second Edition‘ เขียนโดย Len Bass, Paul Clements และ Rick Kazman แต่จริง ๆ ยังมีมากกว่านี้อีกจากที่กล่าวก่อนหน้า ไว้มีโอกาสจะนำมาเล่าสู่กันเพิ่มเติมครับ ^_^

ใจจริงตอนแรกตั้งใจว่าจะอธิบายและยกตัวอย่างประกอบด้วย แต่ไป ๆ มา ๆ ชักเยอะ หากต้องอธิบายสงสัยคงยาวมิใช่น้อย และที่สำคัญคงต้องใช้เวลาพิมพ์มิใช่น้อย เลยขอยกมาเล่าสู่กันแบบแห้ง ๆ ไปก่อนละกันนะครับ ไว้มีโอกาสและจังหวะจะอธิบายพร้อมยกตัวอย่างประกอบให้นะครับ

นอกจากสิ่งที่นำมาเล่าสู่กันแล้ว ยังมีประเด็นสำคัญอื่นที่จำเป็นต่อการออกแบบซอฟต์แวร์และสถาปัตยกรรมซอฟต์แวร์อีก เช่น design patterns, architectural patterns, pattern ประเภทต่าง ๆ เช่น analysis patterns, anti patterns ฯลฯ และยังมี design styles และ architectural styles ซึ่งมีความสำคัญไม่ยิ่งหย่อนไปกว่ากัน และมีความสัมพันธ์กันอีกด้วย ลองดูรูปด้านล่างที่แสดงความสัมพันธ์กันนะครับ โดยอ้างอิงจากหนังสือ ‘SOA Principles of Service Design‘ เขียนโดย Thomas Erl แต่เสียดายที่ไม่มีแสดงให้เห็นว่าสัมพันธ์กับ architectural styles, architectural tactics กันอย่างไร แต่ถ้าอยากรู้ก็ไปตามดูรายละเอียดได้ในหนังสือ ‘Software Architecture in Practice Second Edition‘ ครับ

ความสัมพันธ์ระหว่าง Design Principles กับองค์ประกอบต่างๆ – 1

ความสัมพันธ์ระหว่าง Design Patterns กับองค์ประกอบต่างๆ – 2

ใครสนใจหลักการหรือชั้นเชิงไหนก็ค้นคว้าเพิ่มเติมได้จากอินเทอร์เน็ตและตำราต่าง ๆ ได้เลยครับ เพราะถือเป็น ‘general principles and tactics’ หรือจะสอบถามมาก็ได้ครับ หรือใครมีความคิดเห็นอื่นหรือหลักการหรือชั้นเชิงการออกแบบอื่น ๆ ที่นอกเหนือจากนี้ก็แนะนำกันเข้ามานะครับ :)

ลองทำความเข้าใจและฝึกฝนใช้สิ่งเหล่านี้ให้คล่องกันนะครับ ใครเป็น system analyst หรือ software architect ควรรู้จักและใช้สิ่งเหล่านี้เป็นนะครับ เอ้า…มาเริ่มกันเลย

Design Principles

General Design Principles

  1. Abstraction and Implementation
  2. Functionality and Non-Functionality
  3. Recursive
  4. Data Structure and Type ConversionObject-Oriented Design Principles
  5. Boundary
  6. Coupling
  7. Cohesion
  8. Modularity
  9. Association
  10. Aggregation and Composition
  11. Dependency
  12. Realization
  13. Hierarchy
  14. Classification
  15. Inheritance
  16. Generalization
  17. Specialization
  18. Information Hinding
  19. Encapsulation
  20. Contract
  21. Capability, Operation and Method
  22. Polymorphism
  23. Binding
  24. Primitive
  25. Reusability
  26. Granularity
  27. Passing (เช่น Pass by Value and Pass by Reference)
  28. Construction and Destruction
  29. Dispatch and DelegateGeneral Architectural Design Principles
  30. Balance
  31. Rhythm
  32. Harmony
  33. Unity
  34. Contrast
  35. EmphasisArchitectural Design Principles
  36. Monitoring
  37. Prototype
  38. Template
  39. Activation and Passivation
  40. Balance Concerns
  41. Visitor Object/Service
  42. Filter
  43. Verification and Validation
  44. Application Flow Control
  45. Logic Allocation
  46. Separation of Concerns
  47. Distribution
  48. Skin and Gut
  49. Connect to External Service/Resource
  50. Interoperation
  51. Discoverability
  52. Autonomy
  53. Single Point of Failure
  54. Fault Handling
  55. State Machine
  56. Communication Path
  57. Service Access Channel
  58. Simultaneous Access and Scheduling
  59. Divide and Conquer
  60. Synchronous, Asynchronous and Message Routing
  61. Audit Trail
  62. Persistent Handling
  63. Information Exchange
  64. Configureability
  65. Authentication and Authorization
  66. Localization (L10N) and Internationalization (I18N)
  67. Sensitivity and Trade-OffTransaction Design Principles
  68. Unit of Work
  69. Atomicity
  70. Consistency
  71. Isolation
  72. Durability

General Architectural Tactics

Availability Tactics

Fault Detection

  1. Ping/Echo
  2. Heartbeat
  3. Exception

Fault Recovery

  1. Voting
  2. Redundancy
  3. Spare
  4. Resynchronization
  5. Checkpoint/Rollback

Fault Prevention

  1. Remove from Service
  2. Transactions
  3. Process Monitor

Modifiability Tactics

Localize Modification

  1. Maintain Semantic Coherence
  2. Anticipate Expected Changes
  3. Generalize the Module
  4. Limit Possible Options

Prevent Ripple Effects

  1. Syntax of Data and Service
  2. Semantic of Data and Service
  3. Sequence of Data and Service
  4. Identity of an Interface of A
  5. Location of A
  6. Quality of Service/Data Provided by A
  7. Existence of A
  8. Resource Behavior of A
  9. Hide Information
  10. Restrict Communication Paths
  11. Use an Intermediary
    • data (syntax)
    • service (syntax)
    • identity of an interface
    • location of A
    • resource behavior of A or resource controlled by A
    • existence of A

Defer Binding Time

  1. Runtime Registration
  2. Configuration
  3. Polymorphism
  4. Component Replacement
  5. Adherence to Defined Protocols

Performance Tactics

Resource Demand

  1. Increase Computational Efficiency
  2. Reduce Computational Overhead
  3. Manage Event Rate
  4. Control Frequency of Sampling
  5. Bound Execution Times
  6. Bound Execution Sizes

Resource Management

  1. Introduce Concurrency
  2. Maintain Multiple Copies of Either Data or Computations
  3. Increase Available Resources

Resource Arbitration

  1. First-In/First-Out (FIFO)
  2. Fixed Priority Scheduling
    • semantic importance
    • deadline monotonic
    • rate monotonic
  3. Dynamic Priority Scheduling
    • round robin
    • earliest deadline first
  4. Static Scheduling

Security Tactics

Resisting Attacks

  1. Authenticate Users
  2. Authorize Users
  3. Maintain Data Confidentiality
  4. Maintain Integrity
  5. Limit Access

Detect Attacks

  1. Intrusion Detection System (IDS)

Recovering from Attacks

  1. Restoring State
  2. Identifying an Attacker (Audit Trail)

Testability Tactics

Input/Output

  1. Record/Playback
  2. Separate Interface from Implementation
  3. Specialize Access Routes/Interfaces

Internal Monitoring

  1. Built-In Monitors

Usability Tactics

Run-Time Tactics

  1. Maintain a Model of the Task
  2. Maintain a Model of the User
  3. Maintain a Model of the System

Design-Time Tactics

  1. Separate User Interface

หวังว่าคงพอเป็นประโยชน์แก่นักออกแบบและพัฒนาซอฟต์แวร์บ้างไม่มากก็น้อยนะครับ :) ไว้จะแสดงรายชื่อหนังสือด้านการออกแบบซอฟต์แวร์และสถาปัตยกรรมซอฟต์แวร์เด็ด ๆ ให้ในวันหน้านะครับ ^_^

ณรงค์ จันทร์สร้อย
๑ สิงหาคม พ.ศ. ๒๕๕๓

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s