כיום, נהוג לחלק מערכות תוכנה מסדר גודל בינוני ומעלה למספר חלקים מרכזיים הנקראים נדבכים או שכבות (Layers). ניתן להקביל את החלוקה לשכבות של המערכת לחלוקה של מודול למחלקות בעלות תפקידים שונים. הרעיון הכללי הוא הפרדה מהותית בין חלקים שונים של המערכת שאמורים לתפקד כחבילה סגורה ולטפל באופן בלעדי בתחום עליו הם מופקדים.
להבדיל מחלוקה למודולים ולשגרות שמתבצעת לעתים עפ"י דפוסי עיצוב (Design Patterns) אך בדרך כלל עפ"י ההיגיון של המעצב ללא חוקיות כלשהי, בחלוקה לשכבות קיימות מספר מתודולוגיות שכל אחת מהן מתאימה לסוג אחר של מערכת.
מספר השכבות נקבע ע"י ארכיטקט המערכת עפ"י חלוקה נושאית לתחומי אחריות כאשר מספר רב מידי של שכבות עלול ליצור תקורות בתעבורה בין השכבות ואילו מספר קטן מידי יביא לחוסר מבניות בתוך כל שכבה וכן לסיבוכיות יתר בתוכה.
להלן אופני החלוקה לשכבות המקובלות כיום:
- 2 שכבות - יישום שרת-לקוח קלאסי
- שכבת האפליקציה (Application Layer)
- שכבת בסיס הנתונים (Database Layer) - אחראית על ניהול הגישה למאגרי הנתונים (קבצים או בסיס נתונים)
- 3 שכבות - מוציאים החוצה את שכבת הלוגיקה
- שכבת ממשק המשתמש (Presentation Layer (user interface))
- שכבת הלוגיקה (Business Logic)
- שכבת בסיס הנתונים (Database Layer)
- 4 שכבות - הפרדת שכבת הלוגיקה לשכבת פעולות ושכבת יישויות בהן שכבת הפעולות משתמשת
- שכבת ממשק המשתמש (Presentation Layer (user interface))
- שכבת האפליקציות (Applications Layer)
- שכבת היישויות (Entities Layer)
- שכבת בסיס הנתונים (Database Layer)