أيهما أستخدم KnockoutJs أم AngularJs ؟

مقدمة

ورد هذا السؤال كثيراً, وكان علىَّ أن أقدم له إجابة, وبالفعل كنت أفعل ذلك, ولكن أحببت أن أضع الإجابة هنا للجميع, قد تكون الإجابة هنا مختصرة بعض الشئ, وقد تكون أكثر تركيزاً على Knockout, ولكن أرجو أن تكون مفيدة لمن لديه هذا السؤال. فى البداية قبل أن نشرع بالإجابة عن هذا السؤال, دعونا أولاً نقدم تعريفاً لكل منهم.

KnockoutJs

هى مكتبة أكواد (Library ) تم بنائها بإستخدام Javascript والهدف منها Data-Binding. وكلمة data-binding معناها ربط عناصر HTML بـObject يحمل بعض البيانات, فتقوم KnockoutJs بتوزيع هذة البيانات على عناصر الصفحة, مثال ملئ Label أو TextBox أو ربما Table وغيرهم بهذة البيانات, وليس هذا فحسب, تقوم أيضاً KnockoutJs بمراقبة التغيرات التى تطرأ على هذة البيانات من خلال ما يعرف بـإسم Observables.

فى النهاية, يكون لديك Javascript Object تم ربطه بعناصر الصفحة (HTML Elements/Controls ). حيث تتغير القيم داخل هذا الـ Object بتغير البيانات فى هذة الأدوات والعكس صحيح.

AngularJs

هى Framework متكامل يقوم بعمل الكثير والكثير, من هذا الكثير نذكر Data-binding, وما أود ذكره هنا أن, إمكانيات KnockoutJs هى جزء قليل من إمكانيات AngularJs.

وكلمة متكامل هنا, نذكر منها أن Angular تمتلك إمكانية الإتصال بالـ Server فى حين أن KnockoutJs لا تقوم بهذا, ولكن قد تستخدم Jquery لإداء هذة المهمة. إضافة إلى إمتلاك AngularJs إمكانية عمل Routing فى حين أن KnockoutJs تلجأ إلى إستخدام Plugin أو ربما Library أو Framework يقوم بهذا العمل من أجلك, فعلى سبيل المثال, يمكنك استخدام SammyJs أو غيرها لعمليات الـ Routing داخل KnockoutJs.

تمتلك Angular أيضاً إمكانية إجراء عمليات التحقق من صحة المدخلات (Validation), بينما فى KnockoutJs نحتاج إلى العمل مع Plugin مثال Knockout-Validation أو ما شابه لإجراء مثل هذة العمليات داخل Knockout .

تدعم Angular العمل بإنماط تصميم متعددة مثال MVC و MVVM و *MV , فى حين أن Knockout تدعم العمل مع MVVM. مما يجعل Angular أكثر قابلية لإجراء عمليات الإختبار Testing. وكذلك السماح أكثر بتنظيم الأكواد.

وغير ذلك كثير, مما ستعرفه من أول زيارة لك إلى موقع Angular الرسمىhttps://angularjs.org . كما يمكنك التعرف على إمكانيات KnockoutJs من الموقع الرسمى لها :- http://knockoutJs.com

فمن خلال تعاملى مع كلاهما, يبدو لى أن كل شئ نجده فى Angular, يمكننا فعله فى KnockoutJs بإستخدام بعض الإضافات من هنا ومن هناك!………… ربما, ولكن سيتطلب هذا الأمر المزيد من الجهد. ولكن هل هذا يعنى قولنا بأنه لا يجب علينا تعلم KnockoutJs ؟ أو من الأفضل لنا أن نتعلم Angular ولا نتعلم Knockout ؟

فى البداية, ليس الأمر هكذا, كلاهما يمكن أن تقوم عليه تطبيقات كاملة, ولكن سنجد أن التطبيقات الكبرى ستكون أسهل فى بنائها مع Angular, فى حين أن نفس هذة التطبيقات ستتطلب المزيد من الجهد فى حالة العمل مع Knockout.

لذلك يمكنك إستخدام Knockout فى المهام البسيطة, كأن تقوم بإنشاء صفحة تقوم بعمل العمليات الأربع إنشاء, عرض ,تحديث وحذف للبيانات داخل هذة الصفحة بإستخدام KnockoutJs. ومن الجيد عرض البيانات فى جدول, ومن خلال إستخدام Template يمكنك إنشاء واحد للعرض يحتوى على مجموعة من أداوات العرض مثال Span ,وtemplate آخر يحتوى على مجموعة من أداوات التحرير مثال TextBox و DropDownlist وغيرهم, لتتمكن حينها من إجراء العرض والتحرير فى نفس المكان (In-line Editing) دون مغادرة الصفحة, أو حتى عبر فتح نافذة فرعية (pop-up أو dialog أو Modal ).

وربما تستخدم Knockout فى إجراء عمليات التحقق من صحة المدخلات (Validation), أو ربما تستخدمها فى الكشف عن وجود قيمة معينة داخل قاعدة البيانات لضمان عدم تكرارها وهو ما يسمى بـ Remote Validation, كأن تكشف عن وجود البريد الإلكترونى من قبل, أو ربما إسم المستخدم أو غيرهم.

كذلك من المهام البسيطة التى طبقتها فى مشروع من قبل, هى إستخدام Knockout فى ملئ مجموعة من أداوات الـ DropdownList, كلاً منهم يعتمد على الأخر فى عمله, وكان المثال, يحتوى على ثلاثة أداوت, الأولى لعرض المناطق, والثانية لعرض المدن, والثالثة لعرض الأحياء, وكان يمكن أن تكون هناك أداة رابعة للدول, ولكن كان المشروع يعتمد على العمل ضمن إطار دولة واحدة فقط.

أضف إلى كل هذا عمليات آخرى كثيرة تستطيع إنجازها بإستخدام JQuery ولكن مع Knockout أصبح الأمر سهلاً يسيراً بقليل من الكود دون الحاجة إلى التفكير فى كيفية الوصول إلى أدوات الصفحة كما نفعل فى JQuery.

أخيراً, نذكر أن كون Knockout مكتبة أكواد صغيرة الحجم, قليلة المهام جعلها سهلة التعلم, سهلة الإستخدام, لا تحتاج إلى الكثير لتصبح فى حيز العمل, وهذا يناسب المشاريع,المهام البسيطة أو الصغيرة. على عكس Angular فكونها مليئة بالمزايا والقدرات تحتاج إلى وقت ليس بقليل لتعلمها والعمل بها.

وختاماً, نذكر, أن بإمكانك الإستغناء بواحدة عن الأخرى, ونذكر أيضاً أنه قد يأتى وقت تحتاج أن تتعلم كلاهما, كأن تقابل مشروع سابق أتى إليك للتحديث أو للصيانة يعمل مع Knockout فتحتاج إلي تعلمها أو ربما تنضم إلى فريق يعمل مع Knockout, أو ربما أمراً من الأمور السابق ذكرها بالأعلى, وكذلك الأمر بالنسبة لـ Angular. وستجد أن كلاهما رائع.

 هذ ما تيسر إعداده, إن كانت لديك تجربة فى إستخدام أحدهما أو كلاهما شاركنا بها .

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s