PDA

View Full Version : دلیل استفاده از Groovy & Grails



bamdadd
جمعه 02 مهر 1389, 11:33 صبح
سلام
در حال مطالعه پست های فروم بودم دیدم در بعضی از پست ها اساتید دوستان برنامه نویس را ارجاع داده اند به استفاده از Grails و Groovy
سوالی که برای من پیش اومد این بود که چرا این کار رو انجام دهیم؟ خود JavaEE چقدر باعث کاهش سرعت develope میشه و استفاده از این دو چقدر در Productivity تاثیر داره
آیا استفاده از PHP به صرفه تر نیست؟
در چه پروژه هایی بهتر است که از ایندو استفاده کرد؟
در استفاده از منابع آیا بار کمتری به سرور تحمیل می کنه؟
scope استفاده از Groovy و Grails و پیاده سازی خالص با JavaEE چیست؟
نقش Spring این وسط چیه؟
اگه راجع به ایندو اطلاعاتی هم دارید و تجربه کاری ممنون میشم انتقال بدید.
می دونم سوال بزرگی پرسیدم , از همه دوستان که اطلاعاتی دارند و وقت می گذارند برای پاسخ دادن تشکر می کنم

behrooj
یک شنبه 04 مهر 1389, 01:01 صبح
ممنون از مطرح کردن این موضوع.

من با این بحث شروع می‌کنم:
«... خود JEE چه قدر باعث کاهش سرعت تولید می‌شه و چه‌قدر بهره‌وری رو پایین می‌آره ... »

خیلی با این جمله موافق نیستم. سه موضوع رو در نظر بگیرم:
۱. JEE مجموعه‌ای از استاندارد‌هاست که برای لایه‌ها و نیاز‌مندی‌های مختلف راه‌حل و بایدها و نباید‌هایی رو مشخص می‌کنه که ما معمولاً ازشون به عنوان مشخصات (نیازمندی‌ها) یا JSR یاد می‌کنیم.
۲. شرکت‌ها و گروه‌های مختلف چه متن‌باز و چه تجاری این استاندارد‌ها و پروتوکل‌ها را پیاده‌سازی می‌کنند و ارائه می‌دن.
۳. در هر پروژه‌ی نرم‌افزار مفهوم بسیار مهم «معماری نرم‌افزار» مطرح‌ست که تکمیل‌ کننده‌ی موارد ۱ و ۲ به نظرم.
در واقع مهم‌ترین دلیل من هم همینه که یکی از دلایلی که باعث کاهش یا عدم رضایت در تولید نرم‌افزار بر اساس JEE می‌شه اینه که پروژه یا محصول نرم‌افزاری مورد نظر از معماری و ساختار خوبی استفاده نمی‌کنه در نتیجه اتفاقاتی مثل زیر رایجه:
آ. تصمیم‌گیری‌های تکراری برای پیاده‌سازی و ارائه‌ی نیازمند‌ی‌های مختلف در لایه‌های مختلف توسط برنامه‌نویس
ب. عدم پیروی و تطابق اعضای یک تیم نرم‌افزاری از یک سبک و مجموعه قرار‌دادهای تیمی واحد برای اجرایی کردن پروژه
پ. استفاده از رویکر‌د‌ها، ابزار‌ها و یا تکنیک‌های متفاوت در پیاده‌سازی موارد کاربرد که اتفاقاً همگی درست می‌باشند
مهم‌ترین عوارض این دسته فعالیت‌ها پایین اومدن میزان سرعت و در نتیجه‌ بهره‌وری مورد نیاز در یک پروژه‌‌ست. در واقع کاری که معماری نرم‌افزار در هر پروژه‌ای انجام به غیر از وظایف سنتی خودش اینه که بستری رو فراهم می‌کنه که اعضای تیم به خیلی از دغدغه‌های مطرح در ساختار JEE توجهی نداشته باشن و بر اساس رویکرد‌ها و تکنیک‌های مطرح در معماری نرم‌افزار کار توسعه و تولید انجام بشه. به طور مثال، معماری‌ نرم‌افزار در کنار این که در لایه‌های مختلف نرم‌افزار تا حدی نحوه تولید نرم‌افزار بر اساس تکنولوژی انتخاب شده در آن لایه رو مشخص می‌کنه ممکنه ابزار‌های جانبی مثل تولید‌کننده یا الگو‌های کد آماده هم در اختیار اعضای تیم قرار بده.

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

در طرف دیگه‌‌ی ماجرا هم به نظرم میاد که چارچوب‌هایی مبتنی بر PHP یا Python استفاده‌های خیلی خوب و بهتر از JEE در تولید و ساخت‌ سرویس‌های اینترنتی دارن که در پشت این سرویس‌ها معمولاً نرم‌افزار‌های بزرگ‌تر مبتنی بر JEE در حال خدمت‌رسانی هستند که این ترکیب شاید خیلی هم خوب و مناسب و به ‌صرفه باشه.

یه موضوع دیگه‌ای که برای خود من جالبه اینه که بستر Java به طور کلی بستری همگانی برای فرا‌هم‌کردن نیاز‌مندی‌های مختلف دیگه هم شده؛ به طور مثال چند‌سالیه که زبان Scala که مبتنی بر JVM هم هست هدف ارائه‌ی یک زبان مبتنی بر جاوا ولی Dynamic و Functional هست و به طور مثال موضوع برنامه‌نویسی چند‌هسته‌ای رو به طور خوبی نشانه‌گرفته و البته کار‌بر‌د‌های خیلی جالبه دیگه‌ای هم داشته و مثال‌های دیگه‌ای هم که می‌شه آورد. این نشون می‌ده که برای نرم‌افزار‌های Backend به طور خاص بستر Java بیشتر مورد اقبال عمومی قرار گرفته که البته در این مورد اطلاعات من در فعالیت‌های مشابه مثلاً در PHP خیلی کمه.

Groovy یکی از مهم‌ترین دلایل پیدایشش تلاش در ایجاد زبانی Dynamic و Functional مبتنی و ادغام‌شده در جاوا بود که بعد از مدتی هم یکی از مهم‌ترین دلایل استفاده‌ش، کاربر‌های فراوونش در زمینه‌های Domain Specific Languages بوده که باعث با سطح بالای انتزاع برنامه‌نویس بتونه مثلاً به‌راحتی با مثلاً XML کار کنه.

بر اساس خواص خیلی جالبه Groovy و در رقابت با Ruby on Rails (ROR) بعد از مدتی Grails به‌وجود آمد که به نظرم این خودش نشون می‌ده که خود Grails یکی از انتخاب‌های جایگزین برای JEE یا در کنارشه که باز فکر می‌کنم با توجه به ماهیت Groovyست که بشه این تصمیم رو در استفاده‌ش گرفت یا نه.

در مورد Spring که پیدایشش بر می‌گرده به حدود اوایل ۲۰۰۱، مهم‌ترین شعاری که اون موقع با خودش آورد این بود که می‌خواد JEE رو ساده کنه. در واقع Spring نه یه پیاده‌سازی صحیح و سالم از J2EE بلکه جایگزینی برای ساده‌کردنش بود در ابتدا. اما به مرور زمان دیدگاه‌های تولید و توسعه در Spring به همه رسوخ کرد طوری که الان در JEE 6 می‌بینیم که خیلی مفاهیمی دیده می‌شن و گنجانده‌ شدن که ریشه‌شون رو باید در Spring جست. البته Spring هم در طول زمان به طور جالبی متحول شد و سعی می‌کنه که یه پیاده‌سازی استاندارد JEE رو در حوزه‌ خدماتی چارچوبی خودش ارائه بده. این‌که ما Spring رو انتخاب کنیم یا نه یا این که تکلیفش چیه این طور می‌شه که به نظرم که شاید مهم‌تری خدمتی که Spring ارائه می‌کنه کمک در طراحی و چیدمان لایه‌های و اشیاء مطرح در یک پروژه‌ست که پس هر فناوری‌ که این خدمات رو بسته به نیاز‌های پروژه ارائه بده، می‌تونه جای Spring رو داشته باشه.

سعی کردم خلاصه نظراتم رو مطرح کنم؛ باز‌خوانی نکردم و از خطاهای احتمالی عذر می‌خوام.

ممنون از این بحث جالب.

mazdadoost
سه شنبه 06 مهر 1389, 12:10 عصر
با سلام :

مبحث استفاده از فریمورک های جاوا در این بخش جند باری در این بخش مورد برسی قرار گرفته .
میتونید جستجو کنید.

والی که برای من پیش اومد این بود که چرا این کار رو انجام دهیم؟ خود JavaEE چقدر باعث کاهش سرعت develope میشه و استفاده از این دو چقدر در Productivity تاثیر داره

بله!چطور ؟ برید و مستندات Grails رو شروع کنید به مطالعه.اولین سایت JavaEE تون رو در مدت کمی خواهید ساخت.در عمل خواهید دید که سرعت توسعه ئر عین ظرافت و کیفیت تولید به نحو چشمگیری بالا میره.

در استفاده از منابع آیا بار کمتری به سرور تحمیل می کنه؟
scope استفاده از Groovy و Grails و پیاده سازی خالص با JavaEE چیست؟
آیا استفاده از PHP به صرفه تر نیست؟

این سوال به نظر بنده جاش در این متن نیست (البته میشه روش بحث کرد اما به نظر من بی نتیجه خواهد بود. میتونید جستجو کنید.)

در چه پروژه هایی بهتر است که از ایندو استفاده کرد؟

در هر پروژه ای .از کوچک تا متوسط تا بزرگ.چون مبناشون بر اساس JVM-SPRING-HIBERNATE و خلاصه هر زیر ساخت قدرتمندی هست که شما در دنیای جاوا دارید.

در استفاده از منابع آیا بار کمتری به سرور تحمیل می کنه؟
scope استفاده از Groovy و Grails و پیاده سازی خالص با JavaEE چیست؟


الزاما خیر اما در مواردی که نیاز شما رو به سرویس های کانتینر JavaEE رو مثل EJB مرتفع می کنند میتونند در افزایش کارایی موثر باشند .البته من بار ها در این جا و اون جا گفتم وقتی نیاز شما در دنیای فناوری های جاوا قراره تامین بشه توان پردازش لازم رو در هر صورت تامین می کنید و این مسئله ای نیست که در دنیای واقعه سد راه شما باشه .

نقش Spring این وسط چیه؟

این فریم ورک اجزاء مختلف Grails رو به هم گره میده و mvc در Grails اصولا بر اساس Spring Web MVC هست. و سرویس های دیگه که بحثش مفصله.

کلا برای اینکه به درک کاملی در زمینه سوالی که مطرح کردین برسید لازمه که مطالعه بر روی هر دو ی Pure JavaEE و G&G داشته باشید.
موفق باشید.

bamdadd
جمعه 23 مهر 1389, 16:17 عصر
من دارم گرووی می خونم! زبان جالبیه , مفاهیم جدیدی داره و کمی با جاوا تفاوت داره
یکم مفاهیمش برام سخته چون جدیده قبلا در جاوا ندیده بودم ولی گویا خیلی سرعت رو افزایش بده
گرووی تمموم شه سریع میرم سراغ گریلز چون من عشق وبم :d
به نظر می آد یادگیریش برای جاوا کار ها کمی گیج کننده باشه ولی اگه سابقه روبی یا پایتون داشته باشید ساده تر میشه
کلا چیزه کره ای هست :d

bamdadd
جمعه 23 مهر 1389, 16:18 عصر
یادم رفت بگم خیلی راحت میشه لایبری های جاوا رو توش استفاده کرد
برای من خیلی جذابه چون کد GWT میشه توش زد

bamdadd
جمعه 07 آبان 1389, 23:26 عصر
بيشتر كه مطالعه كردم فهميدم گرووي بسيار متفاوت با جاوا است كه شايد در جاهايي با مفاهيم ابتدايي جاو هم متتاقض باشد
در خيلي جاها ممكن است راندمان را بالا ببرد ولي خيلي از اين ويژگي با نقض فلسفه ابتدايي جاوا همراه است
در اينكه بيشتر مطالعه كنم يا تبخرم را در php بيشتر كنم دو به شكم

mazdadoost
دوشنبه 17 آبان 1389, 10:24 صبح
بيشتر كه مطالعه كردم فهميدم گرووي بسيار متفاوت با جاوا است كه شايد در جاهايي با مفاهيم ابتدايي جاو هم متتاقض باشد
در خيلي جاها ممكن است راندمان را بالا ببرد ولي خيلي از اين ويژگي با نقض فلسفه ابتدايي جاوا همراه است
در اينكه بيشتر مطالعه كنم يا تبخرم را در php بيشتر كنم دو به شكم

نه زیاد در تناقص نیست.
راندمان هم تو حیطه برنامه هایی که با Groovy نوشته میشه از نظر کد کامپایل شده متوسط رو به خوب هست.
ادامه بده .نهایت یه 2 ماهی روش کار کن یک ماه هم روی Grails.
البته همراه با تمرین و ممارست.
موفق باشی.

saeed_Z_F
پنج شنبه 27 آبان 1389, 09:21 صبح
گرووی در بین زبان هایی که برروی JVM نوشته شده اند شاید از نظر بالا بردن سرعت توسعه قوی ترین باشه اما از نظر کارایی زمان اجرا وضع بدی داره الاخصوص در زمانی که حجم کد ها بالا بره. البته قول های زیادی در زمینه بهبود کارایی در گرووی داده شده که باید ببینیم به کجا می رسه.
در کل سرعت توسعه رو بالا می بره البته در عوض کاهش کارایی برنامه در بین زبان هایی که برروی JVM نوشته شده اند فقط scala از performance (کارایی) مناسبی برخورداره.