PDA

View Full Version : گفتگو: PHP Zend Framework



kmahdi70
سه شنبه 11 تیر 1387, 11:24 صبح
سلام دوستان خسته نباشید
میخواهیم راجع به برنامه نویسی تحت Framework های PHP بحث کنیم که استاندارد شرکت Zend میباشد و یک استاندارد جهانیه که هر کس که میگه من برنامه نویس پی اچ پی هستم باید بایکی از این فریم ورک ها کار کرده باشه که کد نویسیش استاندارد باشه.
اگه کسی مطلبی داره بیایید با هم بحث کنیم .
1- چگونگی نصب
2- منابع موجود
3- چگونگی کارکرد و کاربردها
کریمیان

Unique
چهارشنبه 29 آذر 1391, 13:31 عصر
میخواهیم راجع به برنامه نویسی تحت Framework های PHP بحث کنیم که استاندارد شرکت Zend میباشد

framwrok هایی که برای php نوشته شده یکی دو تا نیست و خیلی خیلی زیاده :
yii ,codeigniter ,akelos ,laravel ,cakephp , kohana ,symf ony
و غیره ...


یک استاندارد جهانیه که هر کس که میگه من برنامه نویس پی اچ پی هستم باید بایکی از این فریم ورک ها کار کرده باشه که کد نویسیش استاندارد باشه.
هیچکدوم از این framework ها استاندارد جهانی نیستند و ملاکی برای برنامه نویس بودن یا نبودن تلقی نمیشوند ، مثلا شما فکر میکنین facebook یا همین vBulletin را با این framework ها نوشتند ؟

بار ها این موضوع مطرح شده و من فقط برای اینکه دوستان سوء تعبیر نکنن پست زدم ، framework ها یک قالب کاری از پیش طراحی شده برای یک راستا کردن و تسریع در کدنویسی هستند و نه چیز دیگه ای.

delphi77
سه شنبه 05 دی 1391, 00:11 صبح
درخواست اظهار نظر در مورد تاپیک

سلام دوست عزیز

شاید شما بتوانید توی تاپیک زیر راهنمایی های مناسبی بدهید.

laravel (http://barnamenevis.org/showthread.php?375024-%DA%A9%D8%B3%DB%8C-%D9%87%D8%B3%D8%AA-%DA%A9%D9%87-%D8%A8%D8%A7-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-Laravel-%DA%A9%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%87-%D8%A8%D8%A7%D8%B4%D9%87%D8%9F)

Unique
سه شنبه 05 دی 1391, 01:55 صبح
متاسفانه اصلا از frame work ها استفاده نمیکنم و نظری نمیتونم در موردشون بدم.

hidensoft
سه شنبه 05 دی 1391, 03:47 صبح
هیچکدوم از این framework ها استاندارد جهانی نیستند و ملاکی برای برنامه نویس بودن یا نبودن تلقی نمیشوند ، مثلا شما فکر میکنین facebook یا همین vBulletin را با این framework ها نوشتند ؟

صد البته که ملاک برنامه نویس بودن نیستند. همینطور وی‌بولتین نمونه کد های استاندارد نیست. در مورد فیسبوک هم اگر شما فکر می کنید این سایت با کد اسپاگتی نوشته شده سخت در اشتباهی. اما در مورد استاندارد بودن نمی شه گفت استانداردی وجود داره. به عنوان مثال شما نمی تونی بگی دیزاین پترن ها چرت و پرت هستند و استاندارد نیستند.

framework ها یک قالب کاری از پیش طراحی شده برای یک راستا کردن و تسریع در کدنویسی هستند و نه چیز دیگه ای.
یکی از نقش هایی که فریم ورک ها دارند تسریع کدنویسی هست اما نه همش.
واسه اینکه بفهمیم کلا فریم ورک ها چه کارایی دارند ابتدا باید ببینیم فریم ورک به چه معنی هست و به چی می شه گفت فریم ورک به چی نمی شه گفت !
فریم ورک هم مثل خیلی کلمات دیگه یه معنای کلی داره. هر کدی می تونه یه فریم ورک باشه. به عنوان مثال شما که میگید از فریم ورک استفاده نمی کنی ۴ تا کلاس دارید که توی پروژه هاتون ازشون استفاده کنید دیگه ؟ همون چند تا کلاس می شن فریم ورک شما. یا حتی می شه گفت تنها ۱ فانکشن یا یه فایل هم می تونه فریم ورک باشه. پس شما هیچ وقت نمی تونی بگی از فریم ورک استفاده نمی کنی. هر فضای کاری می تونه یک فریم ورک باشه حالا فرقی نداره چه با ۳۰۰۰ تا کتابخونه چه با یک کلاس یا یک فانکشن یا یک فایل حتی.
اما دلیل اینکه فریم ورک هایی مثل zend که از قدیمی هاست به وجود اومدند چیه ؟

تصور کنید هرکسی توی قالب و سبک کاری خودش کد می زد. یه نفر برای کامپوننت نویسی متد x رو در نظر می گرفت یک نفر متد y. این باعث می شد که وقتی یک نفر به یک پروژه اضافه می شد می بایست زمان زیادی رو برای یادگیری اون فریم ورک می زاشت. به مشکل می خوردند باید باگ هارو خودشون می گرفتند و و و و . تا اینکه یه نفر (یا یه سری) اومد(ند) و شروع کردند به نوشتن کد هایی که عموما مورد استفاده قرار می گرفت. مثل ezComponent که مورد استقبال هم قرار گرفت همه تعداد زیادی از گروه ها و شرکت ها ازشون استفاده کردند. چرا ؟ چون لازم نبود هر بار از صفر شروع کنند. چون می تونستند با کنار هم بودند به توسعه کد کمک کنند ! چون می تونستند باگ های کد هاشون رو کنار هم بر طرف کنند اتفاقی که قبلا توسط گروه چند نفری می افتاد حالا توسط یه کامیونیتی میوفته و مطمئنا کیفیت کد ها بالاتر و امکانات بیشتر و سرعت کد نویسی بالاتری رو به نامه نویس می دادند.

حالا چرا باید از فریم ورک استفاده کنیم و چرا نباید استفاده کنیم ؟

یه چیزی که باب شده میان می گن که فریم ورک X سرعت بالایی داره. به عنوان مثال میان benchmark می گیرن اونم با چه کدی با hello world :) خب اگر بنا باشه که شما یه کد در حد hello world بنویسید باید یه مقدار عقلتون درست کار نکنه تا از یه فریم ورک مثل Zend یا Symfony یا ... استفاده کنید. این Benchmark درسته اما نشون دهنده برتری نیست. مثلا فریم ورک CI یا همون Codeigniter یه فریم خیلی سریع هست اما امکاناتی که ارائه می ده در مقایسه با cakephp یا Yii غیر قابل مقایسه است. باید دید چه کاری رو می خواهیم انجام بدیم. به عنوان مثال من خودم چند سال پیش یه سیستم وبلاگ برای خودم نوشتم که اینقدر ساده بود که از هیچ فریم ورک مشهوری استفاده نکردم و یه فریم ورک خودم براش نوشتم. اما مثلا یه سایت مثل MIDB ! در مورد این سایت چطور ؟ آیا می شه از فریم ورک جامع استفاده نکرد ؟ جواب مثبته شما می تونی هیچ وقت از این گونه فریم ورک ها استفاده نکنید اما برای اینکه کد استاندارد داشته باشید و توسعه سیستم رو برای برنامه نویس های بعدی یا حتی برای خودتون در آینده سخت نکنید بهتره دست به ساخت یک فریم ورک قوی بزنید. حالا هر کس نسبت قدرت برنامه نویسیش کدی رو می نویسیه و بعضی مواقع هم کد هایی که نوشته می‌شن کد های زیاد جالبی از آب در نمیان و مشکلات خاص خودشون رو برای بقیه برنامه نویس ها ایجاد می کنند چون بر اساس ساختار دلخواه یک شخص نوشته شده اما هیچ چیز دست یافتنی نیست. من خودم دیدم که کسایی فریم ورک های خیلی خوبی رو نوشتند برای خودشون و ازش استفاده می کنند و دلیلی نداره شما نتونی.

سیستم هایی مثل Wordpress و vBulletin از فریم ورک های مشهور استفاده نکردند چرا من باید استفاده کنم ؟

بعله این سیستم ها از فریم ورک های مشهور استفاده نکردند اما همونطور که قبلا گفتم این سیستم ها هم فریم ورک خودشون رو دارند. اما آیا توسعه این سیستم ها برای برنامه نویس ها آسان هست ؟ در مورد وی‌بی جواب منفیه من خودم یه پلاگین خواستم برای وی‌بی بنویسم که نهایتا بی خیال شدم اینقدر که کد داغونی داشت. البته این موضوع مربوط به چند سال پیشه در حال حاضر نظری ندارم در موردش. در مورد وی‌پی بله توسعه این سیستم آسونه دلیلش هم عدم رعایت پیش پا افتاده ترین متود های برنامه نویسی مثل MVC هست که موجب راحتی برنامه نویس ها شده و همونطور که میبینید پلاگین های خیلی زیادی رو برای وردپرس نوشتند و دارند می نویسند و خواهند نوشت. مثال زدن دیگر پرتال ها نمی تونه دلیل قانع کننده ای برای انتخاب یا عدم انتخاب فریم ورک های مشهور یا حتی جدید باشه.

جمع بندی کلی

طبق نیازتون از فریم ورک ها استفاده کنید. اگر کاری که می خواهید انجام بدید یه کار سادست و شما حساسیت زیادی نسبت به پرفورمنس سیستم دارید از فریم ورک های سریعتر استفاده کنید. سعی نکنید از این فریم ورک ها برای کار های حرفه ای و بزرگ استفاده کنید چون احتمالا به مشکل بر می خورید چرا که این فریم ورک ها نمی توانند پاسخ گوی نیاز های یک سیستم حرفه ای باشند (تجربیات شخصی). در صورتی که فریم ورک های موجود نظر شما رو جلب نکرد و شما یک برنامه نویس حرفه ای ( حتی متوسط ) هستید دست به کار بشید و سعی کنید یک سیستم MVC یا HMVC بنویسید. در صورت امکان کدهاتون رو به اشتراک بگذارید تا دیگران هم به شما در گسترش این فریم ورک کمک کنند. اگر هم دوست نداشتید به شیوه اسپاگتی کد بزنید مطمئنا هیچ کس شما رو سرزنش نمی کنه. در اکثر موارد هم کارفرما (یا مشتری) زیاد براش مهم نیست که شما از فریم ورک خاصی استفاده کردید یا خیر پس زیاد خودتون رو سرزنش هم نکنید.

MMSHFE
سه شنبه 05 دی 1391, 06:55 صبح
متاسفانه اصلا از frame work ها استفاده نمیکنم و نظری نمیتونم در موردشون بدم.
به نظر من باید بگین خوشبختانه (البته این نظر شخصی منه)

bikran
سه شنبه 05 دی 1391, 09:09 صبح
به نظر من باید بگین خوشبختانه (البته این نظر شخصی منه)

چرا باید بگیم خوشبختانه از فریم ورک استفاده نمیکنیم؟

MMSHFE
سه شنبه 05 دی 1391, 09:37 صبح
گفتم که این یک نظر شخصیه ولی دلیلم اینه که کسی که با PHP خام (منظورم بدون فریمورکها هست) کدنویسی میکنه، تمام قدرت این زبان دستشه ولی توی فریمورک اینطور نیست. بعلاوه باید با ساختار همون فریمورک کار کنه و بعد از مدتی کدنویسی بدون فریمورک براش سخت میشه.

colors
سه شنبه 05 دی 1391, 10:01 صبح
سلام

صحبتهای جناب hidensoft درسته، ولی منم دوس دارم کل کار، زیر دست خودم باشه

eshpilen
سه شنبه 05 دی 1391, 12:27 عصر
البته تعدد فریمورکهای PHP هم خودش مشکل سازه.
چون هر شرکت و گروهی از یک فریمورکی استفاده میکنن.



در مورد وی‌پی بله توسعه این سیستم آسونه دلیلش هم عدم رعایت پیش پا افتاده ترین متود های برنامه نویسی مثل MVC هست که موجب راحتی برنامه نویس ها شده و همونطور که میبینید پلاگین های خیلی زیادی رو برای وردپرس نوشتند و دارند می نویسند و خواهند نوشت. مثال زدن دیگر پرتال ها نمی تونه دلیل قانع کننده ای برای انتخاب یا عدم انتخاب فریم ورک های مشهور یا حتی جدید باشه.
عزیزم خب همهء این فریمورک و الگوهای طراحی برنامه (مثل MVC) برای راحتتر و سریعتر کردن کار برنامه نویسی + گسترش و نگهداریشون هست دیگه.
حالا اگر میگی وی پی توسعش آسونه پس مشکل کجاست؟ فقط چون از MVC استفاده نکرده مشکل داره؟ MVC که به خودی خودش هدف و کیفیت نیست، بلکه وسیله ای برای رسیدن به اون هدف و کیفیت توسعهء راحت تر و سریع تر و امن تر برنامه هاست البته بعلاوهء امکان گسترش و تغییر و نگهداری بهتر.
اگر وردپرس این کارها رو خوب انجام داده و واقعا از MVC هم استفاده نکرده، پس باید نتیجه بگیریم که بدون MVC هم میشه کم و بیش به این اهداف رسید. یا همینطور درمورد شیء گرایی (البته تاجاییکه دیدم ورپرس شیء گراست، ولی احتمالا در تمام بخشها و اصولش اینطور نیست، مثل خود PHP که کاملا شیء گرا نیست ولی از شیء گرایی هم پشتیبانی میکنه و بعضی بخشها/کتابخانه های خودش هم شیء گراست).


اگر هم دوست نداشتید به شیوه اسپاگتی کد بزنید مطمئنا هیچ کس شما رو سرزنش نمی کنه. در اکثر موارد هم کارفرما (یا مشتری) زیاد براش مهم نیست که شما از فریم ورک خاصی استفاده کردید یا خیر پس زیاد خودتون رو سرزنش هم نکنید.
یخورده خیالم راحت شد :لبخند:
ولی تمسخر و سرکوب کد اسپاگتی خیلی فراگیر شده ها!
اوضاع خطرناک شده واسه اسپاگتی نویس هایی مثل من :لبخند:
البته چند نکته.
یکی اینکه اصلا کد اسپاگتی دقیقا چیه و چه درجاتی داره؟
مثلا فقط اگر از شیء گرایی و MVC در پروژه استفاده نکنیم بهرصورت کاملا اسپاگتیه؟
مثلا من درسته از اینا در پروژم استفاده نکردم، اما تاحد ممکن با روشهای ساده تر و بدوی تری مثل تابع ها، دسته بندی بندی کدها و عملیات مرتبط/مشترک و درج هرکدام از اونها در یک فایل جداگانه که اینکلود میشن، و حتی تفکیک نسبی کد برنامه و ساختار صفحات (HTML و اینها) در دایرکتوری ها و فایلهای جداگانه، و غیره سعی کردم برنامه سازماندهی و خوانایی و قابلیت نگهداری و گسترش و تغییر بهتری داشته باشه و کمتر احتمال باگ و ناسازگاری پیش بیاد.
البته به پای MVC و شیء گرایی نمیرسه احتمالا، ولی درحد اینکه کار منو راه بندازه کافی بود و ضمنا عوضش کار برنامه نویسی دو برابر یا حتی بیشتر سریعتر و راحتتر پیش رفت.
نکتهء دیگه اینکه قوی بودن برنامه و برنامه نویس فقط به این چیزا (شیء گرایی و الگوهای طراحی) نیست بنظرم. مثلا پروژهء من (سیستم رجیستر و لاگینم) اینا رو نداره، ولی از نظر الگوریتم ها و منطق و امنیت و انعطاف و امکانات در کل احتمالا یکی از برترین پروژه ها در دنیاست!! جدی میگما! شاید حتی برترین باشه حداقل بین اونایی که بصورت عمومی (نه لزوما بازمتن) منتشر شدن و مثلا خاص و انحصاری (درونی و منتشر نشده) سازمانها و شرکتهای بزرگ نیستن.
چون در زمینهء امنیت و الگوریتم من خیلی کار کردم و مطالعات زیادی داشتم که هرکسی نداره.
نکتهء آخر هم اینکه یک دلیل اینکه از شیء گرایی و MVC تا حالا استفادهء اساسی نکردم بخاطر این بوده که هنوز وقت نکردم روش کار کنم؛ همش داشتم در مسائل پایه ای تری مثل الگوریتم و امنیت و ساختمان داده و پروتکل ها مطالعه و تحقیق میکردم و ضمنا کار عملی/تجاری خیلی کمی هم داشتم به نسبت. شاید بعدها که پروژه های بیشتری کار کردم به مرور به سمت رعایت این روشها هم رفتم و نیاز شد. چون حیطهء دانش و توانایی خودم رو خیلی وسیع گرفتم. مثلا الان میتونم در چند حیطه و چند زبان تقریبا هر برنامه ای خواستم بنویسم، اما البته با همین شکل کدنویسی بقول شما اسپاگتی. یجورایی دنبال توانایی عملی گسترده بودم تا اینکه در یک حیطهء خاص متخصص استاندارد و تمیزکاری بشم که هرجایی با هر استانداردی پذیرش بشه. یعنی اول دنبال این بود که واسه خودم هر برنامه ای رو که خواستم بتونم بنویسم. دنبال تجارت و بازار و کار گروهی و این حرفا نبودم.

Unique
سه شنبه 05 دی 1391, 13:28 عصر
جناب hidensoft اول از همه به خاطر وقتی که گذاشتین و توضیحاتی که دادین و بنده هم استفاده کردم متشکرم

اما چند تا نکته :


صد البته که ملاک برنامه نویس بودن نیستند. همینطور وی‌بولتین نمونه کد های استاندارد نیست. در مورد فیسبوک هم اگر شما فکر می کنید این سایت با کد اسپاگتی نوشته شده سخت در اشتباهی. اما در مورد استاندارد بودن نمی شه گفت استانداردی وجود داره. به عنوان مثال شما نمی تونی بگی دیزاین پترن ها چرت و پرت هستند و استاندارد نیستند.

شما فقط جواب منو خوندین و پاسخ دادین در صورتی که من جواب نظر دوستمون kmahdi را دادم نسبت به این موضوع :

میخواهیم راجع به برنامه نویسی تحت Framework های PHP بحث کنیم که استاندارد شرکت Zend میباشد و یک استاندارد جهانیه که هر کس که میگه من برنامه نویس پی اچ پی هستم باید بایکی از این فریم ورک ها کار کرده باشه که کد نویسیش استاندارد باشه.

این استدلال غلطه و باعث میشه افرادی که کمتر کار کردن یا تازه شروع کردن بد برداشت کنند. چون نه zend جهانیه نه برنامه نویسی بر اساس اونه و نه به تنهایی استفاده از یک framework تضمینی بر استاندارد نویسی هستش.

در مورد اینکه گفتم از framework ها استفاده نمیکنم منظورم این بود از framework هایی که مطرح هستند و افراد و شرکت های دیگه نوشته اند استفاده نمیکنم و نه اینکه یک استاندارد خاصی را برای پیاده سازی کدهای خودم انجام نمیدم و از شی گرائی و pattern ها و کلاس های دیگران استفاده نمیکنم !

یکی از مشکلات عمده ای که من با این framework ها دارم اینه که MVC را به عنوان base قرار میدهند و من اصلا ازش خوشم نیومد و به نظرم Event Driven که در net. انجام میشه خیلی بهتره توی php هم یک framework که اسمش یادم نیست همین قالب را داشت ولی از اون هم استفاده نکردم. لازم نیست کسی فکر کنه چون من استفاده نمیکنم یا x استفاده نمیکنه پس اونها بد هستند مه اینطور نیست ، هر کسی آزاده بررسی کنه و تصمیم بگیره.

در مورد استاندارد نویسی و اینکه میفرمائید استفاده از یک framework در سرعت و نگهداری کد شما عامل اصلی هستند خیر اینطور نیست ، اولا تعداد این framework ها خیلی زیاده و پیدا کردن نیروی کار مختص یک framework باعث میشه شما نیروی کار های خوبی که حالا به دلایلی با اون framework کار نکردند را از دست بدین تازه اگه هم معیار را در تجربه بگذارین تا اون شخص خودش را با framewkor راه بندازه و عملا کار کنه شما باید هزینه کنی براش ! اگه مجموعه ای از برنامه نویسی شی گرا استفاده کنه و مشخص باشه داره از چه کلاس هایی استفاده میکنه و معلوم باشه هر عضو گروه باید روی چه کلاسی کار کنه و چه خروجی ازش انتظار میره و comment نویسی رعایت شده باشه سرعت توسعه و نگهداری در حد مناسبش انجام مبشه البته خود همین هم میشه یک framework یا قالب کاری ! اما نمیشه یک نفر بیاد بگه آقا zend برترین هست و لاغیر !

در مورد اینکه گفتین مثال های من خودشون دارن از یک framework و استاندارد استفاده میکنن بله حق با شماست چون اصلا منظور من این نبود و گفتم اینها از framework های مطرح از جمله zend که شما اشاره کردین استفاده نمیکنند.

در مورد اسپاگتی کد ! اگه فکر میکنین معنیش اینه که شما با یک framework کد نویسی کنی یا یک استاندارد را رعایت کنی ! در اشتباه هستین توصیه میکنم شما هم این مطلب را توی wikipedia (http://en.wikipedia.org/wiki/Spaghetti_code)بخونین


به نظر من باید بگین خوشبختانه (البته این نظر شخصی منه)
منظورم این بود که متاسفانه نمیتونم جواب شما را بدم چون از این framework ها استفاده نکرده ام.

eshpilen
سه شنبه 05 دی 1391, 13:39 عصر
یکی از مشکلات عمده ای که من با این framework ها دارم اینه که MVC را به عنوان base قرار میدهند و من اصلا ازش خوشم نیومد و به نظرم Event Driven که در net. انجام میشه خیلی بهتره توی php هم یک framework که اسمش یادم نیست همین قالب را داشت ولی از اون هم استفاده نکردم. لازم نیست کسی فکر کنه چون من استفاده نمیکنم یا x استفاده نمیکنه پس اونها بد هستند مه اینطور نیست ، هر کسی آزاده بررسی کنه و تصمیم بگیره.
نمیدونم قبلا هم شما بودی که صحبت های مشابهی کردی یا نه.
ولی اون موقع هم بنظر من این گفته مشکل داشت یا مبهم بود و میخواستم مطرح کنم، ولی چون خودم اطلاعات و تجربهء زیادی در این زمینه ها نداشتم چیزی نگفتم.
سوال من اینه که اصلا شما مطمئنی Event Driven و MVC مانعه الجمع هستن؟
بنظر من تا جاییکه میدونم اینطور نمیاد. یعنی یک برنامه میتونه هم Event Driven باشه و هم MVC. ضمنا فکر میکنم این دوتا در دو سطح مختلف هستن. مثل شیء گرایی و MVC همزمان میتونن موجود باشن. یه برنامه میتونه فقط شیء گرا باشه، میتونه از MVC استفاده کرده باشه ولی شیء گرا نباشه، و میتونه هم از شیء گرایی استفاده کامل کرده باشه و هم MVC.
در تعریف های مربوط به MVC و Event Driven هم اگر نگاه کنید بنده متوجه نمیشم اینا چه مشکل یا ارتباطی با هم دارن که نمیتونن در کنار/همزمان با هم استفاده بشن.
مثلا مقالات ویکیپدیا:
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
http://en.wikipedia.org/wiki/Event-driven_programming
چیزی که در این مقالات بنظرم کاملا واضحه اینه که اصلا طبقه بندی این دوتا از هم جداست.
MVC بعنوان architecture طبقه بندی شده و Event-driven جزو paradigm (قابل توجه اینکه شیء گرایی هم یک paradigm است - یعنی این دوتا هردو در یک سطح پایین تری هستن نسبت به architecture ها).
ضمنا دات نت مگه خودش کاملا Event-driven نیست؟ با اینحال تاجاییکه میدونم دات نت فریمورک MVC هم داره.

eshpilen
سه شنبه 05 دی 1391, 13:48 عصر
راستی یک نکتهء مکمل!
Architectural pattern زیرمجموعه ای از design pattern است.
اینو گفتم که بعضیا گیج نشن. چون به MVC اغلب با عنوان الگوی طراحی/design pattern هم اشاره میشه.
در خیلی مقالات احتمالا بجای کلمهء architecture از design استفاده شده.
design pattern یک مقولهء وسیعتری هست و فقط از نوع ساختار/سازماندهی کلی برنامه مثل MVC نیست.
پس MVC همزمان هم یک design pattern است و هم یک Architectural pattern (ولی اصطلاح کاملتر/دقیقترش این آخریه).

منبع: http://en.wikipedia.org/wiki/Design_pattern#Domain-specific_articles

colors
سه شنبه 05 دی 1391, 13:52 عصر
اینجاهم (http://forum.iranphp.org/Thread-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-%D9%84%D9%82%D9%85%D9%87-%D8%A2%D9%85%D8%A7%D8%AF%D9%87-%D8%A7%DB%8C%D9%86%D9%82%D8%AF%D8%B1-%D8%A8%D9%87-%D9%87%D9%85%D9%87-%D9%BE%DB%8C%D8%B4%D9%86%D9%87%D8%A7%D8%AF-%D9%86%DA%A9%D9%86%DB%8C%D8%AF) یه بحثهای شده، بهتره یه سری بزنید.

hidensoft
سه شنبه 05 دی 1391, 14:44 عصر
البته تعدد فریمورکهای PHP هم خودش مشکل سازه.
چون هر شرکت و گروهی از یک فریمورکی استفاده میکنن.
به نظر من مشکل ساز نیستند. شما کانتریبیوت های فریم ورک سیمفونی و زند رو روی گیتهاب ببین.


عزیزم خب همهء این فریمورک و الگوهای طراحی برنامه (مثل MVC) برای راحتتر و سریعتر کردن کار برنامه نویسی + گسترش و نگهداریشون هست دیگه.
حالا اگر میگی وی پی توسعش آسونه پس مشکل کجاست؟ فقط چون از MVC استفاده نکرده مشکل داره؟ MVC که به خودی خودش هدف و کیفیت نیست، بلکه وسیله ای برای رسیدن به اون هدف و کیفیت توسعهء راحت تر و سریع تر و امن تر برنامه هاست البته بعلاوهء امکان گسترش و تغییر و نگهداری بهتر.
اگر وردپرس این کارها رو خوب انجام داده و واقعا از MVC هم استفاده نکرده، پس باید نتیجه بگیریم که بدون MVC هم میشه کم و بیش به این اهداف رسید. یا همینطور درمورد شیء گرایی (البته تاجاییکه دیدم ورپرس شیء گراست، ولی احتمالا در تمام بخشها و اصولش اینطور نیست، مثل خود PHP که کاملا شیء گرا نیست ولی از شیء گرایی هم پشتیبانی میکنه و بعضی بخشها/کتابخانه های خودش هم شیء گراست).
مرسی از توضیحات بیشتر. مشکلی در مورد وی‌پی نیست. بعله بدون MVC نتیجه گرفته و برنامه نویس های زیادی باهاش کانتریبیوت دارند ! (فارسی کانتریبیوت چیه ؟‌:دی) منم نگفتم MVC یه ملاکه یا شی گرایی.


خورده خیالم راحت شد
ولی تمسخر و سرکوب کد اسپاگتی خیلی فراگیر شده ها!
اوضاع خطرناک شده واسه اسپاگتی نویس هایی مثل من
البته چند نکته.
یکی اینکه اصلا کد اسپاگتی دقیقا چیه و چه درجاتی داره؟
مثلا فقط اگر از شیء گرایی و MVC در پروژه استفاده نکنیم بهرصورت کاملا اسپاگتیه؟
مثلا من درسته از اینا در پروژم استفاده نکردم، اما تاحد ممکن با روشهای ساده تر و بدوی تری مثل تابع ها، دسته بندی بندی کدها و عملیات مرتبط/مشترک و درج هرکدام از اونها در یک فایل جداگانه که اینکلود میشن، و حتی تفکیک نسبی کد برنامه و ساختار صفحات (HTML و اینها) در دایرکتوری ها و فایلهای جداگانه، و غیره سعی کردم برنامه سازماندهی و خوانایی و قابلیت نگهداری و گسترش و تغییر بهتری داشته باشه و کمتر احتمال باگ و ناسازگاری پیش بیاد.
البته به پای MVC و شیء گرایی نمیرسه احتمالا، ولی درحد اینکه کار منو راه بندازه کافی بود و ضمنا عوضش کار برنامه نویسی دو برابر یا حتی بیشتر سریعتر و راحتتر پیش رفت.
نکتهء دیگه اینکه قوی بودن برنامه و برنامه نویس فقط به این چیزا (شیء گرایی و الگوهای طراحی) نیست بنظرم. مثلا پروژهء من (سیستم رجیستر و لاگینم) اینا رو نداره، ولی از نظر الگوریتم ها و منطق و امنیت و انعطاف و امکانات در کل احتمالا یکی از برترین پروژه ها در دنیاست!! جدی میگما! شاید حتی برترین باشه حداقل بین اونایی که بصورت عمومی (نه لزوما بازمتن) منتشر شدن و مثلا خاص و انحصاری (درونی و منتشر نشده) سازمانها و شرکتهای بزرگ نیستن.
چون در زمینهء امنیت و الگوریتم من خیلی کار کردم و مطالعات زیادی داشتم که هرکسی نداره.
نکتهء آخر هم اینکه یک دلیل اینکه از شیء گرایی و MVC تا حالا استفادهء اساسی نکردم بخاطر این بوده که هنوز وقت نکردم روش کار کنم؛ همش داشتم در مسائل پایه ای تری مثل الگوریتم و امنیت و ساختمان داده و پروتکل ها مطالعه و تحقیق میکردم و ضمنا کار عملی/تجاری خیلی کمی هم داشتم به نسبت. شاید بعدها که پروژه های بیشتری کار کردم به مرور به سمت رعایت این روشها هم رفتم و نیاز شد. چون حیطهء دانش و توانایی خودم رو خیلی وسیع گرفتم. مثلا الان میتونم در چند حیطه و چند زبان تقریبا هر برنامه ای خواستم بنویسم، اما البته با همین شکل کدنویسی بقول شما اسپاگتی. یجورایی دنبال توانایی عملی گسترده بودم تا اینکه در یک حیطهء خاص متخصص استاندارد و تمیزکاری بشم که هرجایی با هر استانداردی پذیرش بشه. یعنی اول دنبال این بود که واسه خودم هر برنامه ای رو که خواستم بتونم بنویسم. دنبال تجارت و بازار و کار گروهی و این حرفا نبودم.

نه من منظورم تمسخر یا سرکوب برنامه نویسایی که اسپاگتی کد می زنن نبود. یعنی من در اون حدی نیستم که چنین کاری انجام بدم. شما اگر تعریف MVC رو بخونی کسی شمارو مجبور نکرده که حتی می بایست با کلاس کد بزنی. همین کاری که انجام دادی قابل تحسین هست بعضی ها همینقدر هم اهمیت نمی دن. حتما در مورد شی‌گرایی بیشتر مطالعه کنید. چند وقت دیگه بیاید همینجا و نظرتون رو دوباره بگید. مطمئنم تفاوت زیادی خواهد داشت با نظر فعلی شما.


این استدلال غلطه و باعث میشه افرادی که کمتر کار کردن یا تازه شروع کردن بد برداشت کنند. چون نه zend جهانیه نه برنامه نویسی بر اساس اونه و نه به تنهایی استفاده از یک framework تضمینی بر استاندارد نویسی هستش.


سلام. من از همه شما متشکرم که وقت گذاشتید و مطالعه کردید. بعله دقیقا همینطوره.




در مورد استاندارد نویسی و اینکه میفرمائید استفاده از یک framework در سرعت و نگهداری کد شما عامل اصلی هستند خیر اینطور نیست ، اولا تعداد این framework ها خیلی زیاده و پیدا کردن نیروی کار مختص یک framework باعث میشه شما نیروی کار های خوبی که حالا به دلایلی با اون framework کار نکردند را از دست بدین تازه اگه هم معیار را در تجربه بگذارین تا اون شخص خودش را با framewkor راه بندازه و عملا کار کنه شما باید هزینه کنی براش ! اگه مجموعه ای از برنامه نویسی شی گرا استفاده کنه و مشخص باشه داره از چه کلاس هایی استفاده میکنه و معلوم باشه هر عضو گروه باید روی چه کلاسی کار کنه و چه خروجی ازش انتظار میره و comment نویسی رعایت شده باشه سرعت توسعه و نگهداری در حد مناسبش انجام مبشه البته خود همین هم میشه یک framework یا قالب کاری ! اما نمیشه یک نفر بیاد بگه آقا zend برترین هست و لاغیر !

در مورد اینکه گفتین مثال های من خودشون دارن از یک framework و استاندارد استفاده میکنن بله حق با شماست چون اصلا منظور من این نبود و گفتم اینها از framework های مطرح از جمله zend که شما اشاره کردین استفاده نمیکنند.

در مورد اسپاگتی کد ! اگه فکر میکنین معنیش اینه که شما با یک framework کد نویسی کنی یا یک استاندارد را رعایت کنی ! در اشتباه هستین توصیه میکنم شما هم این مطلب را توی wikipedia بخونین

بله منم چیزی غیر از این رو نگفتم. تجربه کد اسپاگتی رو هم خودم دارم و می دونم گاهی خیلی هم خوب جواب می ده برعکس شایعات :دی اما نظر من اینه که بهتره برنامه نویس ها به شی گرایی روی بیارند. واقعا یک دنیای دیگست.

MMSHFE
سه شنبه 05 دی 1391, 20:57 عصر
میخواهیم راجع به برنامه نویسی تحت Framework های PHP بحث کنیم که استاندارد شرکت Zend میباشد و یک استاندارد جهانیه که هر کس که میگه من برنامه نویس پی اچ پی هستم باید بایکی از این فریم ورک ها کار کرده باشه که کد نویسیش استاندارد باشه.
دقت کنید که استاندارد Zend نمیگه حتماً باید با یکی از Frameworkهای معرفی شده کار کنید تا کدتون استاندارد باشه. بعلاوه من هم صحبتهای دوستم Unique رو قبول دارم که میگن هرچی Zend بگه ملاک عمل نیست ولی اگه همون توضیحات Zend رو هم درست و دقیق و بر اساس ترجمه صحیح خونده باشین، میبینید که گفته توی پروژه ها با Framework کار کنید. خوب این یعنی چی؟ یعنی اینکه یک چهارچوب کاری برای خودتون تعریف کنید. نه اینکه الزاماً منظورش این باشه که با ZF یا Yii یا CI و... کار کنید. مثلاً من توی هر پروژه برحسب نیازش کلاسهای لازم رو میسازم و یا حتی در بعضی جاها به روش Procedural کار میکنم و صرفاً توابع سودمندی که لازم میدونم، طراحی میکنم و در جاهای لازم صدا میزنم. این یعنی اینکه برای هر پروژه یک چهارچوب کاری طراحی میکنم و از همون استفاده میکنم و هیچ جای پروژه از اون چهارچوب خارج نمیشم. مثلاً اگه MVC درنظر میگیرم، هیچ جای View کوئری نمینویسم. یا اگه کلاسی برای کار با دیتابیس ساختم، کلاس رو کامل میسازم و حتی برای کارهای ساده مثل Escapeکردن هم یک متد توی اون کلاس میگذارم و هرجا لازم بود، صداش میزنم و هیچ جا مستقیماً از mysql_real_escape_string استفاده نمیکنم بلکه از کلاس مربوطه شئ میسازم و متد مربوطه رو روی شئ ایجاد شده فراخوانی میکنم یا حتی ممکنه static کار کنم.
به این میگن چهارچوب کاری یا Framework که مدنظر Zend هست. این حرف تنها من نیست. توی صحبتهایی که با راسموس و حتی یکی دو مورد با دیمیتری داشتم، اونها هم همین نظر رو تأیید کردن. متأسفانه برخی جاها ترجمه اشتباه و برخی تشابهات کلمات باعث میشه منظور نویسنده اصلی که به زبان انگلیسی مطلب رو نوشته توی ترجمه به درستی برداشت نشه.
موفق باشید.

MMSHFE
سه شنبه 05 دی 1391, 21:04 عصر
راستی فارسی Contribute هم میشه «همکاری» یا «مشارکت»

Unique
سه شنبه 05 دی 1391, 22:31 عصر
ولی اون موقع هم بنظر من این گفته مشکل داشت یا مبهم بود و میخواستم مطرح کنم، ولی چون خودم اطلاعات و تجربهء زیادی در این زمینه ها نداشتم چیزی نگفتم.
سوال من اینه که اصلا شما مطمئنی Event Driven و MVC مانعه الجمع هستن؟
بنظر من تا جاییکه میدونم اینطور نمیاد. یعنی یک برنامه میتونه هم Event Driven باشه و هم MVC. ضمنا فکر میکنم این دوتا در دو سطح مختلف هستن. مثل شیء گرایی و MVC همزمان میتونن موجود باشن. یه برنامه میتونه فقط شیء گرا باشه، میتونه از MVC استفاده کرده باشه ولی شیء گرا نباشه، و میتونه هم از شیء گرایی استفاده کامل کرده باشه و هم MVC.
در تعریف های مربوط به MVC و Event Driven هم اگر نگاه کنید بنده متوجه نمیشم اینا چه مشکل یا ارتباطی با هم دارن که نمیتونن در کنار/همزمان با هم استفاده بشن.

صحبت های شما کاملا درست هستند و مشکل از من بود که توضیحات بیشتری ندادم ! بله امکان نوشتن Event Driven با مفاهیم MVC وجود داره ! (همونطور که توی net. پیاده شده) منظور من این بود که اکثر framework ها پایه را روی مفاهیم MVC گذاشتند و من کلا از این pattern خوشم نمیاد و ترجیح میدم اگه قراره از framework ها استفاده کنم از prado که event driven هست استفاده کنم.

delphi77
پنج شنبه 07 دی 1391, 13:33 عصر
بر همه مبرهن و واضح است که یک تیم کاری نیاز مبرم به یک فریم ورک مشترک دارد.