אני אכתוב גם כאן מה אני חושב...
קודם כול נכנה את הילד בשמו, זה לא תבניות, זה תשתיות שנכתבו בשפה מסויימת(רוב התשתיות שהזכרת נכתבו בPHP יכול ליהיות שיצאו גם גירסאות בDOT.NET, לא שאני שמעתי בכו"א).
התשתיות האלה רובן מבוססות על תבנית נורא נוחה שנקראת MVC, הר"ת של MVC זה: Model/View/Controller
כשהModel בדרך כלל מנהל את הbuisness logic מול הדטאבייס(בד"כ גם מגיע עם התשתיות האלו ORM, שמעבר לניהול הבסיסי של הלוגיקה העסקית, הוא גם מחזיק בתוכו מנוע שיודע לקחת שאילתא מסויימת, ולהריץ אותה מול כול מסדי הנתונים המוכרים).
זאת אומרת שאם אני עובד מול MySQL ומתי שהוא נהייתי מיליונר ועברתי לאורקל, אני לא צריך לגעת בשאילתות שלי, אני מריץ פונקציה פשוטה מתוך הORM נניח Set_DB_Adapter('Oracle'); ואז מבחינתי סיימתי את ההתאמה למסד הנתונים.
עכשיו התפקיד של הController הוא לנהל את כול תהליך הבקשות מהמערכת, בדרך כלל לכול רכיב באתר יש Controller משלו, שמכיל את הפונקציות שלו.
עכשיו מה זה אומר?
נניח יש לי את הController הבא, נקרא לו Blog_Controller
ובתוכו קיימת פונקציה נקרא לה add שמקבלת 2 פרמטרים: title וdescription ומייצרת בלוג בDB.
אז בשורת הכתובת זה ייראה ככה(נניח ויש לנו htaccess עם rewrite rules)
http://www.prettydomain.com/blog/add/
אנחנו לא יצרנו בעצם כלום ברגע שיצרנו controller והגדרנו אותו בקוד, אז כביכול נוצרה לנו היכולת לגשת לאותו Controller ואז לאותה פונקציה בכתובת.
התפקיד של הview זה לקבל מידע מהcontroller ולהציג אותו, עכשיו ישנם x תרחישים אפשריים:
controller מבקש מידע מהmodel
view שולח מידע לcontroller והcontroller שולח מידע לmodel
controller מבקש מידע מהmodel ומעביר אותו לview
בשום מצב הview לא יכול לפנות לmodel בצורה ישירה.
הview זה התצוגה שלנו אם זה לא היה ברור עד עכשיו, בד"כ לכול controller יש view משלו.
עכשיו לגבי תשתיות, מה מומלץ להשתמש ומתי להשתמש:
אני אישית מאמין שיש פרוייקטים שלהשתמש בתשתית הוא מיותר(אתרי תדמית למשל), יש פרוייקטים מסויימים שאני מעדיף אפילו לכתוב תשתית לבד, וככה היא מכילה בדיוק את מה שאני צריך, ולא פיסת קוד אחת מיותרת.
עכשיו בוא נעבור על מה שהזכרת:
Magento - תשתית שנכתבה בZend Framework משמשת בעיקר לפיתוח מערכות מסחר אלקטרוניות, נותנת תשתית מצויינת, קצת מסורבלת אם לא מכירים ZF מההתחלה.
PHPBB3 - מערכת פורומים די וותיקה שכתובה בPHP, שנים שלא יצא לי לראות מה הולך איתה.
DRUPAL - תשתית מצויינת שנועדה לפרוייקטים שמתעסקים בניהול תוכן בעיקר, יש שם כלים חזקים מאוד לניהול תוכן, אבל כשזה מגיע לפיתוח של רכיבים לבד, זה כבר נהיה מסורבל מדי.
WP - מערכת בלוגים די מוכרת, שכתובה בPHP לא זכור לי שאפשר להשתמש בה כתשתית לפיתוח אתרים או משהו בסגנון, היא הייתה בלוג ונשארה בלוג, יצא לי להסתכל על הקוד שלה, לא ברור ממש מה הולך שם.
JOOMLA - אחת המערכות המסורבלות ביותר, נורא קשה לפתח עליה דברים, נורא מסורבלת, טוענים שהיא כתובה בMVC, לא יודע ממה שאני ראיתי היא רחוקה מהמודולריות של MVC ומהרעיון שנות אור.
עכשיו המלצות שלי:
simfony - תשתית שכתובה בPHP ומבוססת MVC בצורה מלאה, יש בה פיצ'רים מטורפים, דוגמא הכי בסיסית זה סינטקס שפיתחו במיוחד שנקרא YAML, שמאפשר לייצר טבלאות במסד נתונים, בצורה הכי פשוטה וכיפית שיש(לוקח זמן להתרגל לרעיון אבל זה עדיין מדהים), עוד פיצ'ר מגניב זה Admin Genreator שמאפשר לקחת מודלים שנוצרו דרך YAML, ולייצר ממשק ניהול עם controllerים וview, הדבר היחידי שהפריע לי זה הקושי בהתקנה, יש באתר המון דרכים להתקין את המערכת, לקח לי יותר משעה להצליח להתקין אותה כמו שצריך.
Zend Framework - מי שמעוניין בתשתית נקיה שכתובה בצורה מופתית, ומשתמשת ביכולות של PHP עד כדי מיצוי טוטאלי, צריך להשתמש בה, החסרון היחידי שלה זה שאין לה מנוע טמפלטים מאורגן, ואין לה גם ORM חוץ ממה שניתן כברירת מחדל.
זה הכול, קחו בחשבון שאין קסמים, אומנם המערכות האלה נורא נורא פשוטות אבל למי שאין רקע בתיכנות, יהיה קשה להסתנכרן מולם בצורה טובה.