PDA

View Full Version : مزایا و معایب JSF



saeed_Z_F
یک شنبه 13 آبان 1386, 14:42 عصر
سلام
از کسایی که تجربه کار و آشنایی با JSF رو دارن سوال دارم (unhandled_event (http://barnamenevis.org/forum/member.php?u=35095) و Bahmany (http://barnamenevis.org/forum/member.php?u=13523) و...)
به نظر شما آیا معماری و ساختار JSF از ابعاد مختلف مانند Performance و Reuseability و راحتی در استفاده و معماری و... مورد قبول شما هست .
می خواهم در مورد نقاط قوت و نقاط ضعف JSF توی این تاپیک بحث کنیم .

Bahmany
یک شنبه 20 آبان 1386, 15:51 عصر
سلام
اجازه بدید بحث رو با یک تعریف شروع کنیم و همنطوری بریم جلوتر تا یه چیزی گیرمون بیاد.
همونطور که خودتون بهتر می دونید JSF تکنولوژی است برای طراحی صفحات وب در پروژه های Web Application.
که شامل :



JavaServer Faces technology is a framework for building user interfaces for web applications. JavaServer Faces technology includes:
Java APIs to represent UI components, manage state, handle events, and validate input. The API has support for internationalization and accessibility.
Two JSP custom tag libraries for expressing user interface (UI) components within a JSP page, and for wiring components to server-side objects. Page authors can easily add UI components to their pages.
JavaServer Faces technology is based on the Model View Controller (MVC) architecture for separating logic from presentation, so if you have been practicing this, you'll feel at home with JSF
A JSF application is just like any other Java technology-based web application; it runs in a Java servlet container, and contains:
JavaBeans components (or model objects) containing application-specific functionality and data
-- Event listeners -- JSP pages
-- Server-side helper classes
-- A custom tag library for rendering UI components
-- A custom tag library for representing event handlers and validators
-- UI components represented as stateful objects on the server
-- Validators, event handlers, and navigation handlers.
-- Application configuration resource file for configuring application resources
One of the advantages of JSF is that it is based on the Model View Controller (MVC) architecture, to offer a clean separation between presentation and logic. This may ring a bell for those who are using existing web frameworks such as Struts. However, note that JSF and Struts are not competing technologies, and in fact, they interoperate together. JSF, however, does have some advantages over Struts. For example, in Struts there is only one way to render an element, while JSF provides several mechanisms for rendering an individual element. It is up to the page designer to pick the desired representation, and the application developer doesn't need to know which mechanism was used to render a component




به نظر بنده بیشترین مزیت JSP محیط طراحی بسیار قدرتمند و راحت آن که توسط IDE ها فراهم شده می باشد که کار طراحی رو برای Developer ها راحت میکنه.




Ease-of-Use: Several aspects of the JavaServer Faces architecture contribute to its ease-of-use. For one, JavaServer Faces technology offers a clean separation between logic and presentation, enabling a wide range of users -- from web-page designers to component developers-- to take advantage of JavaServer technology, resulting in a division of labor and a shorter development cycle. Also, a user-interface created with JavaServer Faces technology handles all the complexities of user-interface management, including input validation, component-state management, page navigation, and event handling.
Standardization: JavaServer Faces technology is being developed through the Java Community Process. Several prominent, respected tools vendors are contributing members of the expert group and are committed to supporting JavaServer Faces technology in their tools.
Device Independence: JavaServer Faces technology is designed to be flexible. By defining only component functionality in extensible UI component classes, the JavaServer Faces architecture allows component developers to extend the component classes to generate their own component tag libraries targetted for specific clients.

saeed_Z_F
یک شنبه 20 آبان 1386, 21:32 عصر
سلام
با نوشته های Bahmany (http://barnamenevis.org/forum/member.php?u=13523) موافقم ولی به نظر من کار با تگ برای یک Developer خیلی سختر از کار کد نویسیه این یکی از معایب JSF است .
یکی دیگه از معایب اون سخت بودن توسعه یک کامپوننت هر چند ساده است این کار مراحل زیادی داره و خیلی پیچیده است .
یه عیب دیگشم نداشتن رویدادهای Ajax است که البته گفته میشه توی JSF 2 اضافه میشه .
اما اینکه برای تگ ها میشه به راحتی IDE نوشت مزیت خیلی مهمیه .

unhandled_event
جمعه 25 آبان 1386, 17:53 عصر
سلام
بابت تاخیر ببخشید
من با JSF در محیط JDeveloper شروع کردم یک IDE نسبتا سریع و خیلی با امکانات و کم مشکل.
این ساختاری هم که نوشتم بر اساس تجربه کار کردن با ADF Faces بوده
اما طبق گفته خود راهنما جزیی از JSF استاندارده. ADF Faces یک پیاده سازی اوراکلی از استاندارد JSF هست با نیم نگاهی به تکنولوژی قدیمی تر اوراکل یعنی Oracle Forms .
در Oracle Forms ایده Binding بین اجزاء مختلف یک صفحه با دیتابیس ایده اصلیه پیاده سازی فرمهاست. فرمها بصورت Java Applet میان رو Client اجرا میشن حالا اینها همین طرز فکر رو با
JSF مخلوط کردن ( و قبل از اون با Struts بوده ) و کامپوننتهای خودشون هم به JSF اضافه کردن و فریم ورک تحت وب ساختن که البته من خودم در محیط ویندوز یعنی VB6 و VB.NET تجربه چندان خوبی از Binding مستقیم کنترلهای فرم با دیتابیس نداشتم که تازه در اینجا یک معضل سرورساید بودن Event ها و تحت وب بودن هم بهش اضافه میشه و Binding بین کنترلهای فرم و فیلدهای یک Table یا Entity Object میتونه کل مزیت Object Orianted بودن پیاده سازی یک فرم رو خراب کنه گرچه کارها رو خیلی وقتها راحت تر میکنه.
اما خود JSF هیچ صحبتی از فرم و Binding بر مبنای یک Table در دیتابیس نمیکنه بلکه در JSF بحث Binding بین کامپوننتهای صفحه JSP و معادل جاوایی اونها در یک Managed Bean مطرحه
اما خب من اطلاعات کمتری در مورد Struts دارم.


شباهتهای JSF و Struts زیاده چون طراحان هردوی اونها تقریبا یک تیم هستن
1- هردو بر پایه MVC بنا شدن.
2- هردو از یک Servlet مرکزی بعنوان Controller استفاده میکنن
3- در هر دو Tag Library های استاندارد JSP در لایه View نقش اصلی رو دارن.


بعضی از تفاوتها:

1- Struts مثل JSF از UIComponent ها استفاده نمیکنه و فقط تعداد کمی TAG داره.
2- در JSF اگر بخواین چندتا Function رو بصورت تعریفی در فایل config معرفی کنین که در زمان اجرا شدن Action ها پشت سرهم اجرا بشن کار سختیه اما در Struts راحت تر این کار انجام میشه.

3- در JSF اجزاء صفحه تک تک کامپوننتها هستن فرم هم حتی یک کامپوننت محسوب میشه تا بالاترین سطح که یک view هست. درصورتیکه در Struts یک صفحه شامل فرمها هست و فرمها وقتی Submit میشن در قالب ActionForm در Bean ها خودشون رو نشون میدن که در واقع بخش مدل در Struts به حساب میاد.

4- در JSF یک LifeCycle یا طول عمر مشخص و منظم داریم برای یک چرخه Request تا تولید Response درصورتیکه در Struts اینطور نیست.

بنابراین عمده تفاوت بین این دو فریم ورک در بخش View و Model هست و در قسمت Controller تفاوت چندانی وجود نداره.
از اونجاییکه در مورد نرم افزارهای تحت وب معمولا سه دیدگاه وجود داره یعنی :

1- طراحی یک وب سایت معمولی ولی قشنگ پر از جاوا اسکریپت و فلش.
2- دیدگاه پورتالی و یا وب سایتهای اطلاع رسانی رسمی.
3- دیدگاه Web Application ها و یا پکیج های تحت وب.

معمولا انتظارات و نوع استفاده و نقاط ضعف و قوت هم فرق میکنه.
مزیت بزرگ JSF قابلیت Customize پذیری اون در کل اجزائشه با توجه به سه دیدگاه بالا
(گرچه ساده نیست ولی بهرحال یک روال مشخص و مرحله به مرحله ای داره )
چون همه چیز بصورت Interface استفاده میشه و شما میتونین بجای پیاده سازی خودش کلاس خودتون رو جایگزین کنین اما خب ضمانت درست کار کردنش هم با خود برنامه نویسه.
ضمن اینکه شما قسمت زیادی از منطق Controller رو میتونین در فایلهای config اونه و اگر روزی اینها تغییر کنن با یک تغییر در فایل config که xml هم هست مساله حل میشه و نیازی به تغییر کد و recompile نیست
در کل کار کردن با فریم ورک صرفه جویی زیادی در وقت و انرژیه اما باید با محدودیتهای فریم ورک هم کنار بیایم و یا اونها رو با Customize کردن برطرف کنیم.

saeed_Z_F
شنبه 26 آبان 1386, 08:08 صبح
. ADF Faces یک پیاده سازی اوراکلی از استاندارد JSF هست با نیم نگاهی به تکنولوژی قدیمی تر اوراکل یعنی Oracle Forms .
در Oracle Forms ایده Binding بین اجزاء مختلف یک صفحه با دیتابیس ایده اصلیه پیاده سازی فرمهاست.

من با ADF و Oracle JDeveloper کار کردم محیط بسیار Stable و بدون مشکلی داره ولی از معماری ADF نمی تونی به سادگی سر در بیاری اگه توجه کرده باشی کلی فیلتر و فایلهای xml برای تنظیمات داره که شمارو بطور کامل به ابزار و ADF وابسته می کنه که البته این سیساست اراکل است و همچنین سرعت ADF هم پایینه .



یک معضل سرورساید بودن Event ها و تحت وب بودن هم بهش اضافه میشه و Binding بین کنترلهای فرم و فیلدهای یک Table یا Entity Object میتونه کل مزیت Object Orianted بودن پیاده سازی یک فرم رو خراب کنه گرچه کارها رو خیلی وقتها راحت تر میکنه.
اما خود JSF هیچ صحبتی از فرم و Binding بر مبنای یک Table در دیتابیس نمیکنه بلکه در JSF بحث Binding بین کامپوننتهای صفحه JSP و معادل جاوایی اونها در یک Managed Bean مطرحه
اما خب من اطلاعات کمتری در مورد Struts دارم.

به نظر من این سرور ساید بودن eventها خیلی JSF رو ضعیف کرده چون امکان فرستادن eventهای کلاینت ساید که توسط AJAX مدیریت میشرو سخت می کنه . البته من شنیدم که قراره تو JSF 2 این قابلیت اضافه بشه .



شباهتهای JSF و Struts زیاده چون طراحان هردوی اونها تقریبا یک تیم هستن
1- هردو بر پایه MVC بنا شدن.
2- هردو از یک Servlet مرکزی بعنوان Controller استفاده میکنن
3- در هر دو Tag Library های استاندارد JSP در لایه View نقش اصلی رو دارن.



در کل من قبول دارم که JSF از Struts قوی تره .
من با GWT هم کار کردم به نظر من از لحاظ معماری خیلی قوی تر از JSF و همچنین سرعت بالا تری هم داره و برنامه نویس رو هم از شره Tag و Javascript خلاص میکنه .

Bahmany
چهارشنبه 28 آذر 1386, 08:16 صبح
saeed_Z_F (http://barnamenevis.org/forum/member.php?u=37320) نمی خوام وسط پست هات چیزی بپرونم
به نظر بنده بهترین محیط برای طراحی JSF محیط Sun Studio Creator 2 هستش

saeed_Z_F
چهارشنبه 28 آذر 1386, 16:26 عصر
saeed_Z_F (http://barnamenevis.org/forum/member.php?u=37320) نمی خوام وسط پست هات چیزی بپرونم
به نظر بنده بهترین محیط برای طراحی JSF محیط Sun Studio Creator 2 هستش
سلام
کاملا موافقم ابزار فوق العاده ایه البته Java studio creator یک لایه معماری بر روی JSF گذاشته و تولید Web Application رو با JSF بسیار آسان کرده .