Defining Modularity (การนิยามความเป็นโมดูล)
Merriam-Webster นิยาม module ว่าเป็น “ส่วนประกอบมาตรฐานหรือหน่วยอิสระแต่ละหน่วยในชุดหนึ่ง ที่สามารถนำมาประกอบกันเป็นโครงสร้างที่ซับซ้อนยิ่งขึ้นได้” ในทางกลับกัน ในหนังสือเล่มนี้ เราใช้คำว่า modularity เพื่ออธิบายการจัดกลุ่มโค้ดที่เกี่ยวข้องกันในเชิงตรรกะ ซึ่งอาจเป็นกลุ่มของคลาสในภาษาเชิงวัตถุ หรือกลุ่มของฟังก์ชันในภาษาเชิงโครงสร้างหรือเชิงฟังก์ชัน นักพัฒนามักใช้ module เป็นวิธีจัดกลุ่มโค้ดที่เกี่ยวข้องกันไว้ด้วยกัน ตัวอย่างเช่น package com.mycompany.customer ใน Java ควรมีแต่สิ่งที่เกี่ยวข้องกับลูกค้า ภาษาส่วนใหญ่มีกลไกสำหรับความเป็นโมดูล ( package ใน Java, namespace ใน .NET และอื่น ๆ)
ภาษาโปรแกรมยุคใหม่มีกลไกการแพ็กเกจ (packaging) ที่หลากหลาย และนักพัฒนาหลายคนพบว่ายากที่จะเลือกใช้อันไหนดี ตัวอย่างเช่น ในภาษาสมัยใหม่หลายภาษา นักพัฒนาสามารถกำหนดพฤติกรรมได้ในรูปแบบ function/method, class หรือ package/namespace ซึ่งแต่ละแบบก็มีกฎการมองเห็น (visibility) และขอบเขต (scoping) ที่ต่างกัน บางภาษายิ่งซับซ้อนขึ้นไปอีกด้วยการเพิ่ม construct อย่าง metaobject protocol เพื่อให้มีกลไกการขยาย (extension) มากขึ้นไปอีก
สถาปนิกต้องรับรู้ว่านักพัฒนาแพ็กเกจสิ่งต่าง ๆ อย่างไร เพราะการแพ็กเกจมีนัยสำคัญต่อสถาปัตยกรรม ตัวอย่างเช่น หาก package หลายตัวผูกติดกันแน่น (tightly coupled) การนำ package ใดตัวหนึ่งไปใช้ซ้ำกับงานที่เกี่ยวข้องจะยากขึ้น