יום שלישי, 13 בינואר 2009

שילוב צד לקוח בצד שרת

קיימים לא מעט מדריכים לשפות השונות, קיימים המון מדריכים לשילוב בין שפות כאשר מתייחסים לטכנולוגיה מסויימת (כמו AJAX), אך מה עם השילוב הבסיסי יותר של צד הלקוח בצד שרת, כאשר לא מדובר על טכנולוגיה מהפכנית, אלא על דרך תכנות וסידור קוד ברמה הבסיסיים ביותר.

סידורם של המתחילים - איפה הסדר?
כל מתחיל בשפות צד שרת נוטה בתחילת דרכו לכתיבה הלא מקצועית של השפה, כאשר בתחילה הינו יוצר דף HTML (בתקווה שעל זה הוא כן מקפיד), וגם זה לא תמיד, ואז זורק לתוך הדף שלל קודים, שביחד אמורים לעשות משהו.


הבעיה הנפוצה בכתיבה כזאת, היא כמובן שאינה מסודרת, מאורגנת, קשה להתמצאות (המשפט המוכר "אבל אני זוכר כל קוד" לא תופס בהמשך הדרך), וקשה במיוחד לשנות בה קוד, דבר שעלול לגרור שינוי בהיקפים גדולים להפליא.
הדרך הזו נזנחת דיי מהר לאחר שלומדים על קצת סדר וניקיון, ובמקומה עוברים לשיטה בסיסית אחרת, אבל נקייה יותר.

שלב ביניים ראשון - מתחילים על נקי
כאשר מבינים שזה בלתי נסבל, בלתי אפשרי, בדרך כלל עוברים לשלב ביניים, בשלב זה קיימת הפרדה בין ה-PHP ל-HTML, כאשר ה-HTML רץ לפני, ואילו ה-HTML נכתב בהמשך.
עדין אין הפרדה מוחלטת, אבל קיים סדר ברור ונעים לעין, וכאשר רוצים לתכנת בדף אחד זו בהחלט אחת הדרכים לעשות זאת.



שלב ביניים שני - כתיבת HTML בפונקציות
לעיתים השלב הזה מגיע לפני הקודם, ולעיתים אחריו, אבל בנקודה מסויימת בהם המערכות קצת (הרבה) יותר מסובכות, מתחילה ההנחה שלהפריד את ה-HTML מהשאר היא הדרך הנכונה, והדבר הטוב ביותר הוא ליצור פונקציות HTML במדפיסות כל פעם תוכן, והקריאה להם תעשה בצורה מסודרת.
בשלב הזה עדין בדר"כ לא חושבים שאם יש תוכן שחוזר על עצמו שאינו ב-WHILE (לולאה נפוצה שמתבצעת כל עוד הערך שקול לאמת) ונגרם בעקבות שאילתה, יש עדיפות ליצור פונקציה עבורו.


שיטה נפוצה - עיבוד בקבצי עיצוב
כשממשיכים עם מערכות בעלות מורכבות שונה, הדורשות השפעה על כל העיצוב מכל מקום בדף, משנים את התפיסה לכך שהדף נוצר בסוף התהליך, כאשר במשך כל זמן ריצתה קוד מזינים למחלקה שמטפלת בעיצוב נתונים, והיא זאת שבסיום מריצה פונקציה שיוצרת את מבנה הדף בהתאם לנתונים שהוזנו.


בשיטה זו ושיטות דומות לה (לדוגמה בפורומי IPB), נפוץ לשמור משתנה שמכיל את כל העיצוב של הדף, ולהדפיסו בסוף במידה ולא היו שגיאות בריצה.
ובכך, במידה וכן היו שגיאות, ניתן לעצור את הדף, להוציא נתונים על השגיאה, ולא להמשיך בריצה.

בנוסף בשיטה בה מעבדים את הנתונים בנפרד, ניתן לבצע שינויים דרסטיים גם בקבצי הקוד, וגם בקבצי העיצוב, בלי צורך שאחד ישפיע על השני, ובכך העריכה הינה יותר פשוטה.

סיכום - בחירת הדרך לשילוב HTML
בנקודה מסויימת, אחרי שעוברים על מבנים נוספים כמו ADO, ועוד רבים אחרים, לומדים שהדבר הטוב ביותר הוא בהתאם לצורך, לדוגמה Wordpress, שבחר לשלב HTML בתוך קבצי ה-PHP, ועשה זאת באלגנטיות ובצורה בה התוכן מופרד, וזאת בשל התחשבות בכמות הגולשים ובפשטות העריכה.

אז איך משלבים? מה הכי טוב? אני מאמין שהדבר הכי טוב הוא בהתאם לצורך, אין דבר מוחלט, והרבה תלוי במתכנת, בצרכים, ובמשאבים.

המשך תכנות נעים.

5 תגובות:

Itay Alon אמר/ה...

לא אחד מהפוסטים המוצלחים שלי, בגלל שהתחלתי עם זמן ואזז החלטתי לפרסם לפני שהיה מוכן, מה שגרם לי לקצר אותו בהרבה ממה שחשבתי, כך שלצערי זה לא אחד מהפוסטים שאני אוהב, למרות שיכולתי להציג פה עשרות דרכים, אבל החלטתי שלא.

בכל קמרה אני עובד על פוסט גדול אחר, גם יקח לו שבועיים, זה שווה את המאמץ.

אנונימי אמר/ה...

חחח, קראתי ולא הבנתי מה בדיוק רצית... ואחר כך ראיתי את התגובה שלך.

אנונימי אמר/ה...


בתור מתכנת PHP יחסית מקצועי אני יכול לומר שהשיטות האלה מוכרות והשיטה האחרונה (שעובדים דרכה בIP.Board אף טובה מאוד), כעקרון אם רוצים לעבוד בדרך PHP 5 עדיף להשתמש במחלקה סטטית שתכיל את המידע על המשתמש, הקבוצה ולא לעשות את זה דרך מחלקת אובייקט (כמו שעשו ב1.3 ו2.3.5 וכל גרסאות VB)
למרות זאת לדעתי אם האנשים ברמה יחסית סבבה בPHP כן יבינו למה אתה התכוונת בפוסט ולכן הוא לא עד-כדי-כך גרוע :)

מציע לך לנסות לעבוד מול toString של PHP 5 אתה תוהב אותו :)

Itay Alon אמר/ה...

דבר שלא ציינתי פה ושמור לפוסט הבא שלי הוא MVC, ואם אתה מכיר את המושג זה בדיוק דן בהפרדה של התפקידים השונים בבניית אתר.

BomBas אמר/ה...

יפה מאוד, אני מאוד אוהב את הפוסטים שלך ואת ההגיון.
דבר חשוב שלא ציינת פה הוא ה PARSING ב TEMPLATES, שבא עם ההפרדה בין PHP ל HTML.

כל הכבוד :)