לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 12-02-2011, 01:05
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
זקוק להמלצות למימוש ה VIEW

היי, אני כותב מערכת MVC ודיי תקוע עם מימוש ה view.
אני עובד עם xsl בתור template engine ופרט ל xhtml אני מעוניין גם לפלוט את התוכן כ json וכ xml.
אם חושבים על זה בצורה ישירה, אין לי בעיה ליצור מחלקה של view וממנה להוריש את שלושת המחלקות הנ"ל כאשר כל אחת תביא פונקציונליות שתלויה ב content type שלי. אבל! וזה אבל גדול, נחשוב רגע על שרת REST. אין לי רצון לשכתב את הקוד (כי הוא כבר כתוב ועושה את העבודה) אבל שרת REST יכול לספק את המידע בכל מיני אופנים בניגוד לאפליקצית web שמספקת נניח רק xhtml ו json בקריאות ajax, אפליקצת ה REST תחזיר את התוכן לפי מה שמבקשים ממנה, כלומר:
קוד:
http://api.example.com/users/13.json

מחזיר את המידע כ json, ולעומתו
קוד:
http://api.example.com/users/13.xml

מחזיר את המידע כ xml, ויהיה טיפשי לממש שתי מתודות נניח
קוד:
get_users_as_json($id) get_users_as_xml($id);

אלה יותר חכם ליצור View factory שמחזיר את ה view הנכון, ואז לעבוד איתו בלי בכלל לדעת באיזה צורה התוכן יצא.
מה שאני מנסה לשאול (ודיי לא מצליח) זה איך לממש view ג'נרי שיוכל לפלוט לי כל סוג של מידע (נסתפק לפחות ב 3 שלמעלה).
כרגע יש לי view עם מתודה abstract אחת שהמטרה שלה היא לייצר את התוכן, וכל view אחר כגון JsonView יורש ממנה וממש את המתודה (במקרה הזה זה פשוט return json_encode($this->data).
המשותף לכולם שהם עובדים עם מערך. כלומר זה נראה ככה:
קוד PHP:
 $view = new Xhtml/Json/XmlView();
$data = array();
$data['lang']='en';
$data['current_user'] = CurrentUser::get();
//get some more info from DB
$view->set_data($data);
echo 
$view->render(); 

ואני לא חושב שלעובד תמיד עם מערך זה נוח.

אשמח להצעות.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 12-02-2011, 12:14
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 2 שנכתבה על ידי fadey שמתחילה ב "כן, אתה קצת לא ברור, אם תראה..."

דווח, השעה הייתה 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 שאני עובד איתו אלה לספק ממשק אבסטראקטי.
נקווה שזה יותר ברור.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 13-02-2011, 08:24
  fadey fadey אינו מחובר  
 
חבר מתאריך: 15.07.02
הודעות: 1,027
בתגובה להודעה מספר 3 שנכתבה על ידי eXtruct שמתחילה ב "דווח, השעה הייתה 2 בלילה...."

אני לצערי לא כ"כ מבין את השאלה שלך.. אבל אני אזרום עם מה שאני חושב שאני מבין ממך.

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

איך אתה מתכוון להציג את התבנית הראשית שלך בסופו של דבר?

אני נגיד, עושה משהו גנרי כזה:

קוד PHP:
 class View extends Core {
        
        public 
$Title "ללא כותרת";

        
        function 
__construct($action$title) {
            
$this->Title $title;
            
$this->Generate_view($action);
        }
        
        
        private function 
load_model_file($file) {
            require_once(
ROOT_PATH 'admin/models/' $file '.php');
                        
        }
        
        private function 
Generate_view($action) {
            
$this->Content constant('ROOT_PATH') . "admin/views/V" $action ".php";
            include(
"layout.php");
        } 


ככה נגיד אני יכול ליצור תצוגה מסויימת שאני רוצה, ולטעון אותה דרך ה-layout הכללי..


אני מקווה שזה נותן לך כיוון.
_____________________________________
ציטוט:
Different people use different tools, but its mostly morons who pretend that the problems with PHP actually matter.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 20-02-2011, 15:38
  משתמש זכר iNfLuX iNfLuX אינו מחובר  
 
חבר מתאריך: 13.07.06
הודעות: 106
שלח הודעה דרך ICQ אל iNfLuX
בתגובה להודעה מספר 1 שנכתבה על ידי eXtruct שמתחילה ב "זקוק להמלצות למימוש ה VIEW"

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

לדוגמא:

קוד PHP:
 $request = new HttpRequest();
$viewResolver = new ViewResolver($request)
$view $viewResolver->resolve();

class 
ViewResolver {
    
    private 
$request;
    
    public function 
__construct(Request $request) {
        
$this->request $request;
    }
    
    public function 
resolve() {
        return 
ViewFactory::createByContentType($request->getContentType());
    }




במידה והכיוון ניראה מתאים ארחיב בשימחה על הרעיון.
_____________________________________

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://muzx.net/files/public/avatars/1208187486.gif]

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://muzx.net/files/public/avatars/1188591880.gif]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 01:17

הדף נוצר ב 0.05 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר