12-02-2011, 12:14
|
|
|
חבר מתאריך: 27.10.05
הודעות: 1,067
|
|
דווח, השעה הייתה 2 בלילה. ננסה לנסח מחדש.
האפליקציה שאני בונה מורכבת מ library ומ application, כאשר library זה כל מה שקשור ל MVC, ניתוב, סטרטגיות ניתוב, בקשות ותשובות, יכולת לבצע hierarchical calls ממודול למודול וכדומה.
והאפליקציה זה בעצם המימוש של אתר מסויים בעזרת הספרייה (ובואו לא נכנס רגע ללמה אני לא משתמש ב zend, ci, kohana או עוד כל מיני FWים מוכנים).
מכיוון שאני רוצה שהספריה שלי תיהיה מאלה ותאפשר לי בעתיד להקים כל אתר, בלי בכלל לדאוג לכל ה backend, אלה רק לכתוב מודלים, קונטרולרים ומבטים ספיציפים לאפליקציה שאני בונה, אני מעוניין לתמוך מההתחלה בשרת REST. קצת שינויים בהגדרות ואני מגדיר סטרטגית ניתוב חדשה לגמרי שמריצה לי בקשה לשרת ה REST שלי.
כאט נסתכל על ההבדלים בין 3 דברים:
1. אתר שמגיש עמודי תוכן - לרוב התוכן יהיה מוגש כ XHTML ולכן אין לי בעיה לעשות hardcoded בכל הקונטרולרים השייכים להגשת תוכן את הדבר הבא:
קוד PHP:
$this->view = new ViewXhtml();
2. service שנותן גישה למידע דרך AJAX. לרוב זה הבחירה בין xml ל json, לצורך הקלה נניח שאני רוצה להגיש תוכן רק ב json (יותר קל לעבוד איתו ב JAVASCRIPT וכדומה). ושוב אין לי בעיה לעשות hard-coded בכל קונטרולר השייך לסרביס הנ"ל את הדבר הבא:
קוד PHP:
$this->view = new ViewJson();
3. שרת REST. לעומת שתי האחרים שרת הREST מגיש תוכן לפי מה שמבקשים ממנו (ראה הודעה ראשונה לדוגמא). ולכן אני לא יכול לעבוד ישירות עם view מסויים, אלה אני צריך לעבוד עם view אבסטרקטי בלי לדעת מה יהיה סוג התוכן בפלט.
השאלה הנשאלת היא איך ליצור view אבסטרקטי שיהיה נוח לעבוד איתו? מה שיש לי היום זה
קוד PHP:
abstract class View{
protected $data;
public function set_data(array $data){
$this->data=$data;
}
public abstract function render();
}
class ViewJson extends View{
public function render(){
return json_encode($this->data);
}
}
class ViewXml extends View{
public function render(){
return array_to_xml($this->data);
}
}
class ViewXhtml extends ViewXml{
public function render(){
$xml = simplexml_load_string(parent::render());
//Do xslt magic here
}
}
כאשר array_to_xml זו פונקציה שלוקחת מערך והופכת אותו לסטרינג XMLי. כמו כן יש ViewFactory שהמטרה שלו לייצר view לפי התוכן שרוצים לדוגמא:
קוד PHP:
$this->view = View::factory('json');
מחזיר לי ViewJson.
זה עונה על הדרישה שלי (כי ה factory מייצר view ואני לא באמת יודע מה ה view שאני עובד איתו). אבל לדעתי ה view שלי מאוד מאוד מוגבל, בגלל שהוא מבוסס על מערך.
ולכן אני מחפש הצעות למימוש viewים שונים (נסתפק ב 3 הנ"ל) ככה שיהיה נוח לעבוד איתם אבל בלי לדעת מה ה view שאני עובד איתו אלה לספק ממשק אבסטראקטי.
נקווה שזה יותר ברור.
|