وبلاگ فيکسل برای گرافيست ها
SharpLife وبلاگ شخصی مهدی تقی زاده
بازگشت شاهو طوفانی
اين صداگذاری و ميکس آخرشه!
نکته جالبی در مورد تابع output_add_rewrite_var
کاراکتر های فارسی در عکس توسط PHP
مصاحبه من با مجله وزین IranAMP
واژه های فناوری اطلاعات و برابر های پیشنهادی فرهنگستان
دوره های آموزش IT
استانداردهای کدنويسی PHP
| صفحه قبل


IranPHP
نماينده رسمي سايت PHP.net

webilix
منبعي براي برنامه نويسان PHP

phprun
وبلاگي خواندني براي تمام PHP كارها

ם تعداد بازديدكنندگان
كل: 924755
ديروز: 915
امروز: 805
ם تعداد كاربران آنلاين
1 نفر
ם پنج مراجعه آخر
wworldpw.prv.pl
kinjoe.no-ip.be
serx.wml.in
dtpydryjd.hit.bg
dtpydryjd.hit.bg
 
 
فريم ورک PRADO (قسمت اول)
PRADO Framework مقدمه:
استفاده مجدد از کدها (Code-Reusability) و جداسازی منطق برنامه از محتوا، از موضوعات هميشگی برنامه نويسی وب هستند. با استفاده از Template Engineها و فريم ورکهای بر پايه MVC، به خوبی می توان منطق (Logic) و محتوا (Content) را از هم جدا کرد. با وجود اين، استفاده مجدد از کد، بخصوص برای کسانی که با واسطهای کاربری (UI) سر و کار دارند معضلی است که حتی برنامه نويسان باتجربه هم با آن دست به گريبان هستند. علت اين امر فقدان الگویی است که امکان هندل کردن المنتهای وب مرتبط با UI را به طریقه شی گرا فراهم کند. برای مثال، برنامه نویسان برای بازيابی ورودی کاربر در يک فيلد متنی از يک فرم وب، در سمت سرويس دهنده (Server) معمولا از آرايه های POST_$ يا GET_$ استفاده می کنند که نام فيلد متنی در سمت سرويس گيرنده (Client) تبديل به یک شاخص (Index) در اين آرايه ها می شود. برای تشخيص اينکه آيا دکمه Submit کليک شده يا نه، معمولا نام دکمه Submit که به صورت شاخص در آرايه های سراسری ذکر شده، ظاهر می‌شود، بررسی شده و يا اينکه از Set بودن یا نبودن يک متغير پنهانی فرم به Submit شدن فرم پی می‌بریم. برای استفاده مجدد از چنين کدی، می‌بایست آنرا در جاهای مختلف Cut و Paste کنيم که از اين نظر مستعد خطاست و تمام تلاش ما را برای جداسازی منطق از محتوا ناکام می‌گذارد. بر اين اساس، فريم ورک PRADO برای حل مشکل کدنويسی های تکراری و سطح پايين در توسعه برنامه های وب مبتنی بر PHP ، توسعه پيدا کرد. نام PRADO مخفف PHP Rapid application Development Object-oriented می‌باشد و وب سایت رسمی آن xisc است.
PRADO يک فريم ورک Component-base و Event-driven (رخدادگرا) برای برنامه نويسی وب با PHP 5 است. يک Component يک واحد نرم افزاری است که تمام مشخصات و رفتارهای مربوطه را در خود دارا بوده و با تغييرات جزئی می‌توان آن را مورد استفاده مجدد قرار داد. PRADO قراردادی جهت نوشتن کامپوننتها وضع کرده است و کامپوننتهای پايه ای برای المنتهای وب پر استفاده نظير فيلد ورودی متن، Checkbox، ليست Drop-down و ... از قبل پياده سازی شده است. کامپوننتهای جديد را می توان با وراثت يا ترکيب کامپوننتهای موجود، توسعه داد. در PRADO برخلاف عادتهای برنامه نويسی گذشته بايد به صورت Event-driven کدينگ کنيد، بدين ترتيب که رفتارهای هر کامپوننت را به خودش واگذار می‌کنیم (یعنی هر کامپوننت Event های خود را هندل کند) که مسلما این رفتارها قابل بسط و تعمیم می‌باشند.

PRADO يک فريم ورک Component-base و Event-driven (رخدادگرا) برای برنامه نويسی وب با PHP 5 است.

در PRADO برای دسترسی به ورودی کاربر در يک فيلد متنی از عبارت textbox->Text$ استفاده می‌کنيم که textbox$ به کامپوننتی ارجاع می‌کند که نمايانگر يک فيلد متنی است و Text يک مشخصه (Property) از کامپوننت است که مقدار ورودی کاربر را در خود نگه می‌دارد. برای پاسخ به فشردن دکمه Submit (که یک رخداد یا Event از طرف کاربر است) بايد يک تابع گرداننده رخداد (Event Handler) برای رخداد onClick کامپوننت دکمه نوشته شود. (دکمه Submit خود یک کامپوننت است) وقتی دکمه کلیک می‌شود، اين تابع گرداننده رخداد به طور اتوماتيک توسط فريم ورک فراخوانی می‌شود. بطور خلاصه، توسعه برنامه های وب با PRADO در اصل شامل نمونه گیری از انواع کامپوننتهای از قبل ساخته شده و مورد نياز برنامه، پيکربندی آنها با مقداردهی مشخصه های آنها و پاسخ دهی به رخدادهای مرتبط با آنها توسط توابع گرداننده وقفه و نهايتا ترکيب آنها برای انجام وظايف برنامه است.
نيازمندی ها و نصب
PRADO يک پروژه کد باز است که مجوز بهره برداری (Licence) از آن مطابق BSD است. اجرای PRADO مستلزم PHP 5 همراه با اکستنشن SimpleXML است و تحت سرويس دهنده های وب آپاچی و IIS تست شده و بخوبی کار می‌کند. خوشبختانه مستندسازی API آن بطور کامل انجام شده و مثالها و خودآموزهای خوبی برای آن نوشته شده است. در این سلسله مقالات، ابتدا به معرفی مفاهيم پايه PRADO می‌پردازم و يک مثال Form Validation را بطور مفصل توضيح می‌دهم تا بخوبی کاربرد آن را متوجه شوید. سپس نحوه نوشتن کامپوننتهای Reusable را با استفاده از روشهای Inheritance و Composition نشان می‌دهم. برای درک بهتر مطالب بعدی نگاهی اجمالی به مفاهيم OO بياندازيد. wink
مفاهيم پايه
يک کامپوننت يک آبجکت است که خصيصه هايی برای آن تعريف می‌شود که به کمک آنها می‌تواند با ساير کامپوننتها ارتباط برقرار کند. خصایص کامپوننت ها در فايلهايی تعريف می‌شوند که اصطلاحا Component Specification File گفته می‌شود. اين خصيصه ها مانند Member Variableها یا Propertyهای یک آبجکت هستند که البته از طريق متدهای getter (برای خواندن مقدار آنها) و setter (برای ست کردن مقدر آنها) در دسترس هستند. برای مثال، خواندن مقدار خصيصه Text از کامپوننت TTesxtBox منجر به فراخوانی متد ()getText و نوشتن اين مقدار توسط متد ()setText صورت می‌پذيرد. Eventها خصيصه های ويژه ای هستند که نام متدها را بعنوان مقدار خود می‌پذيرند. الحاق (ست کردن) يک متد به يک Event باعث می‌شود در صورت بروز رخداد، اين متد فراخوانی شود. برای مثال رخداد OnClick کامپوننت TButton موقعی رخ می‌دهد که فريم ورک تشخيص دهد دکمه Submit متناظر کليک شده است (با بررسی داده های ورودی). حال متدی که به اين رخداد الحاق شده باشد، بصورت اتوماتيک توسط فريم ورک فراخوانی می شود تا اين رخداد را هندل کند. بدین ترتیب برنامه نويسی Event-driven اين امکان را به ما می‌دهد تا رفتارهای يک کامپوننت را براساس نيازهای جديد و پيش بينی نشده به راحتی تغيير دهيم. يک کامپوننت مشتق گرفته شده (فرزند) تمام خصايص کلاس والد خود را به ارث می‌برد.
يک کنترل، کامپوننتی است که علاوه بر دارا بودن خصيصه های مرتبط، يک واسط کاربری يا UI هم دارد. کنترلهای ساده نظير کنترلهایی که المنتهای وب پر استفاده را نمايش می‌دهند، اغلب UI خود را در کد تعريف می‌کنند. UI کنترلها می‌تواند تنها از یک متن ثابت تشکيل شود يا از Templateها برای تعیین قالب UI خود استفاده کند.
يک Page (صفحه) کنترلی است که منطق Page Controller را اجرا می‌کند. PRADO الگوی طراحی Page Controller را به علاوه نمونه ضعیفی از Front Controller را که Application ناميده می‌شود، بکار می‌برد. هر درخواست صفحه (Page Request) توسط Front Controller دريافت می‌شود که وظيفه آن ارسال اين Request يا درخواست به Page Controller مربوطه است. حال Page Controller داده های ورودی را از Request استخراج کرده و action خواسته شده را از مدل فراخوانی می‌کند و در نهايت View مناسب برای نمايش را تعيين می کند. (در مقالات بعدی راجع به MVC بیشتر صحبت می‌کنم)
يک ماجول (Module) کامپوننتی است که مجموعه Page هايی که برای يک هدف مشترک به کار گرفته می‌شوند را در یک گروه قرار می دهد. اين ماجول در واقع مخزن اصلی منطق و داده ميان صفحات موجود در یک گروه است.
کامپوننتها به يکديگر از طريق رابطه والد فرزندی مرتبط می شوند. هر کامپوننت حداکثر يک والد و يک ID دارد که به طور منحصر به فرد آن کامپوننت را در ميان کامپوننتهای هم نيای خود مشخص می‌کند. يک Page بالاترين کاپوننت است که هيچ والدی ندارد. از اين رو يک کامپوننت را می توان بصورت يک درخت قلمداد کرد که ريشه آن Page و مثلا سه گره درخت کامپوننتهای فرزند آن هستند. رابطه والد فرزندی بسيار اهميت دارد زیرا امکان آدرس دهی منحصر به فرد هر کامپوننتی را در درخت ميسر می‌سازد. برای مثال فرض کنيد کامپوننت HomePage والد کامپوننت Menu باشد که خود والد کامپوننت MenuItem است. بنابراين MenuItem را بصورت منحصر به فرد ميتوان به اين طريق آدرس دهی کرد: ابتدا HomePage بعد Menu و سپس MenuItem. در کد PHP اين رابطه را اينطور می نويسيم:

$homePage->Menu->MenuItem
که homePage$ به کامپوننت HomePage اشاره می‌کند. با استفاده از توالی ID کامپوننتها می توان به Property های یک کامپوننت نیز دسترسی داشت. در مثال فوق، عبارت:

$homePage->Menu->MenuItem->Caption
به خصيصه Caption کامپوننت MenuItem اشاره می‌کند.
مفهموم دیگر Postback است که دات نت کاران عزيز با آن کاملا آشنايی دارند يعنی فرم به همان صفحه ای که حاوی فرم است Submit می‌شود که برای اينکار ما در PHP يا مقدار خصيصه action فرم را "" قرار می دهيم (که شخصا توصیه نمی کنم) يا مقدار PHP_SELF را به جای آن قرار می دهيم و معمولا PHP کاران به جای اصطلاح Postback می گويند فرم Self Submit است يعنی روی خودش Submit ميشود. اگر ما یک صفحه را در پنجره مرورگر مشاهده کنیم، Postback مانند یک User actionای است که منجر به پاسخ از طرف صفحه می‌شود. در واقع فرآیند فعل و انفعالات کاربر با Web Application را می توان ترتیبی از Postbackها همراه با انتقال پیمایش به صفحه دیگر دانست. هر Postback منجر به برخی بروزرسانی ها در وضعیت صفحه می شود.
Viewstate وضعیت صفحه را در طی ترتیبی از Postbackها نگه می‌دارد.
برای مثال فرض کنيد کاربر بخواهد اطلاعات حساب کاربری خود را از طریق صفحه Profile بروز کند. کاربر باید مواظب باشد هر دفعه که یک قلم داده را بروز کرد، تغییرات را ذخیره کند. از آنجا که پروتکل HTTP، بی وضعيت (Stateless) است، داده هايی که قبلا کاربر وارد کرده به شرط اينکه سمت سرويس دهنده داده ها را در بانک يا فايلی ذخيره نکنيم، از بين خواهد رفت. Viewstate مکانيزمی است که امکان ذخيره داده ها در طی چندين Postback متوالی به يک صفحه را فراهم می کند. مفهوم Viewstate با Session تفاوت می کند زيرا داده های Session ميان درخواستهايی به چندين صفحه متفاوت ثابت هستند حال آنکه داده های Viewsate تنها به يک صفحه متعلق هستند.
در مطلب بعدی يک مثال Form Validation با PRADO می نويسيم.
بنده را از نظرات سازنده خود مطلع کنيد. smile
 
نظرات شما(15)  
چقدر بزرگ شدی؟!!!
rolleyes پوف! گرد و خاک زيادی رو سايت نشسته و نياز به يه خونه تکونی اساسی داره! دلم تنگ شده بود برای نوشتن. اين مدت گرفتاريها به حد اعلای خود رسيده و باعث شده که کمتر وقت بروزرسانی سايت رو داشته باشم. در اين مدت اتفاقات زيادی در دنيای PHP افتاده که دوستان علاقه مند کم و بيش از آنها مستحضر هستند.(از عرضه Zend Platform گرفته تا همکاری IBM و Zend و ...) در طی این دوران احساس کردم جامعه PHP کاران وسعت چشمگيری پيدا کرده است و مجموعه فعاليتهايی که روی وب صورت گرفته، نشان از جا باز کردن PHP در بين برنامه نويسان ايرانی است. عرضه PHP 5 و پذيرش اون در مارکت Enterprise از جمله عوامل کليدی گسترش و محبوبيت اين زبان اسکريپت نويسی قدرتمند و بی ادعاست. متاسفانه سرويس دهنده ها و ميزبان های وب با علم به قدرتمندتر بودن PHP 5 هنوز جرات نمی کنند تا کلا روی نسخه 5 سرمايه گذاری کنند، با اين حال اين دليل نميشه که ما برنامه نويسان هنوز به نسخه ۵ سوئيچ نکنيم و از قافله عقب بمانيم. جامعه PHP کاران ايرانی خيلی فعالتر شدند و پکيج های خوبی توسط برخی دوستان عرضه شده که قابل مقايسه با نمونه های خارجی هستند. سايت Iran PHP جديدا خيلی فعال شده و هر روز با مطالب جديد در صفحه اصلی اون روبرو می شيم. من شخصا خيلی کم و گذری سری به ايران پی اچ پی می زدم ولی الان چند وقتيه هر روز مراجعه می کنم و از مطالب خوب اشون بهره مند می شم. خوشبختانه انجمن ها دست کسانی است که کارشون رو بلد هستند و علاقه مند PHP و حامی کدباز هستند. از همين جا بهشون خسته نباشيد ميگم. اينطور که بوش مياد قراره سايت ايران پی اچ پی Rebuild بشه و تصميم گرفته شده که کاری حرفه ای و در سطح انجمن PHP کاران ايران انجام بشه. من از همينجا اعلام می کنم اگه دوستان قابل بدونن اگه کمکی از دستم بربياد مضايقه نخواهم کرد در بین اساتید فن کار یاد بگیرم. تو پستهای دوستان صحبت از يک مجله الکترونيکی مانند PHP Magazine يا PHP Arch شده بود که اين ايده را خیلی وقته در ذهنم داشتم ولی خوب اون موقع من بجز دو سه نفر از دوستان که بطور جدی PHP کار می کردند، کسی رو نمی شناختم ولی حالا ماشاا... هر جا بری صحبت از PHP و قدرت و سرعت اون هست. به هر حال اين مهم رو با کمک دوستان ميشه به سرانجام رسوند و مرجع خوبی برای دوستان علاقه مند درست کرد و مهم تر اينکه تجربيات بچه ها به تبادل گذاشته میشه. صحبت از پکيچ کردم دو سه تا کار ديدم که يکی شون (که هنوز مرحله تست) رو ميگذرونه کار آقای علی اميرنژاد از PHP کارای حرفه ای هست که هم اکنون سايت زيبا و پرمحتوای MeganIT بر پايه سيستم مديريت محتوای WX-Blog در حال اجراست. من هنوز قسمت مديريتی رو نديدم ولی مطمئنم که چيز تر و تميزی ساخته آقای اميرنژاد.
پکیج دیگری که بازهم قسمت مدیریت اش رو ندیدم ولی ظاهر خوبی داره سیستم مدیریت محتوای تالار وب هست که امکانات خوبی داره. برای تمام اين دوستان آرزوی موفقيت می کنم.
اگه نوبتی هم باشه از خودم بگم، آخرين کاری که انجام دادم وب سايت مرکز امور مشارکت زنان نهاد رياست جمهوری به آدرس women.org.ir هست که از چندين فاز تشکيل شده که سه فازش در حال حاضر تکميل شده و دو فاز ديگرش که اولی ساخت يک Ebook Generator و دیگری سيستم فرمول بندی و محاسبه هوشمند داده های آماری مرکز هست در حال انجام است. خود سايت که صرفا يک CMS برای کنترل محتوای صفحات سايت هست که کاربران معمولی بتوانند به سادگی سايت را بروز رسانی کنند. قسمت مهم سایت که يک سيستم اتوماسيونه و ۸۰ درصد کل کار سه فاز اول بود مربوط به برنامه توسعه فرهنگی اجتماعی زنان(30228) و بانک مجتمع سازمانهای غير دولتی(NGO) که هر يک از بخشهایی چون مديریت برنامه و گزارشات، مديرت کاربران، مديريت پيغامها، جستجوی پيشرفته، گزارشگيری و ... تشکيل شده است. در طراحی اين سايت و قسمتهای زيرمجموعه از جديدترين متدهای برنامه نويسی PHP استفاده کردم و با وام گرفتن از مفاهيم الگوی طراحی MVC و الگوهای ديگر فکر کنم در حد يک Case Study برای ارائه باشد. با اينکه اين سايت را با PHP 4 پياده سازی کرده ام با همين مدل شی گرايی ضعيف، توانستم نسخه Customize شده ای از MVC را در طراحی آن اجرا کنم.
در طراحی و کدينگ اين سايت از اغلب الگوهای طراحی معروف برای PHP استفاده کرده ام که همين باعث سرعت بخشيدن به کار شد. اگر شما هم می خواهيد وقت خود را برای سر کله زدن با مسائل تکراری تلف نکنيد، حتما راه حلهای الگوهای طراحی را به دقت مطالعه کنيد و نمونه کاربردهايش را در ذهن خود مجسم کنيد و بلافاصله دست به کار بشید و وقت کد بنویسید. صحبت در مورد اين سايت زياد است ولی نه فرصت بيان اش هست و نه گوش شنواش! suprised
مقاله هايی در زمينه الگوهای طراحی، فريم ورکهای PHP، شناخت MVC، نوشتن برنامه های Event-Driven، مدل کردن برنامه های PHP با UML و ... در دوره جديد وبلاگ نويسی ام خواهم نوشت. اين باز غيبت کبری نخواهم کرد اما غيبتهای صغری شايد طولانی شود. wink
راستی مطلب بعدی ام که تا آخر هفته ميره رو آنتن فريم ورک PRADO هست. از دست نديدش!
 
نظرات شما(117)  

 
 
نام: نيما شايافر
متولد: 7/7/1362
تحصيلات: دانشجو
شغل: طراح وب و برنامه نويس
وضعيت: آفلاين

ماهيانه
مرداد 86 (2)
خرداد 86 (1)
دي 84 (4)
آذر 84 (5)
مرداد 84 (1)
تير 84 (1)
ارديبهشت 84 (2)
دي 83 (1)
آذر 83 (2)
آبان 83 (2)
مهر 83 (4)
شهريور 83 (6)
مرداد 83 (3)
تير 83 (7)
خرداد 83 (7)
ارديبهشت 83 (8)
فروردين 83 (13)
اسفند 82 (12)

موضوعي






جستجوي پيشرفته

BlogRolling is currently inaccessible.
©2004, Design & Developed by: Nima Shayafar. All rights reserved.