المشاركات

Creating Custom Annotations in Android

annotataion : هي بيانات وصفيه metadata البيانات الوصفيه : هي مجموعة بيانات تعطي معلومات حول بيانات اخري وهنا annotataion هي بشكل اساسي تعطي معلومات حول الكود انشاء annotation مخصص :  @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)   @interface Status {    public enum Priority {LOW, MEDIUM, HIGH}   Priority priority() default Priority.LOW;   String author() default “Amit”;   int completion() default 0;  } @Target : اين يمكن وضع هذا اذا لم يحدد يمكن استخدامه في كل مكان  ElementType.TYPE (class, interface, enum) ElementType.FIELD (instance variable) ElementType.METHOD ElementType.PARAMETER ElementType.CONSTRUCTOR ElementType.LOCAL_VARIABLE       @Qualifier : هي تعمل على تاهيل dependency  وهي تستخدم للتمييز بين كائنات من نفس النوع ولكل و instance مختلف   @Retenttion :كم المده التي يحتفظ ب annotation RetentionPolicy.SOURCE : هذا النوع يتم تجاهله اثناء compiler ولا يحتاج...

local function

يمكن انشاء داله بداخل داله اخرى وتعتبر داله داخليه لايمكن الوصول لها من main مثال : fun boo (name:String ){ val x= 2 fun foo (age:Int){ println ( "the age is $ age and your name is $ name and $ x " ) } } fun main (args: Array<String>) { boo ( "ali" ) } هنا داله foo تعتبر محليه لا يمكن الوصول لها ولكن هي يمكنها الوصول الي prameter الخاص بالداله الام وكذلك تصل الى property ايضا

افضل الممارسات لتسميه المتغيرات و الدوال والكلاسات

هذه بعض افضل الممارسات لمبرمجين الجافا ينبغي اتباعها اثناء كتابه الكود البرمجي 1 - تجنب  الاسماء التي لا معنى لها  تجنب كتابه الاسماء التي لا معني لها مثل x , y ,ad التي لا تؤدي الى نيه انها ببساطه تقلل من قابليه كتابه الكود وهي الانسب للبرامج التي تحتوي علي 50 سطر برمجي او اقل لا تستخدم هكذا نوع  من التسميات في المشاريع الاحترافيه لماذا ؟ لانه لايمكن بعد فتره ان يتم اختبار المشروع  2 - استخدم اسماء ذات معني قدم اسماء ذات معني التي تكشف عن نيه المبرمج مثال اذا كانت اسم الداله getPayDate() هو افضل بكثير من getPD() حيث عند قراءه هذا الداله انا اعرف انها ترجع تاريخ الدفع حتى بعد عده سنوات  3 - تفضيل الاسم القصير على الطويل اذا كان يكشف عن النيه بوضوح  استخدام الاسم القصير يسهل عمليه الكتابه والقراءه  4 -  تجنب اسماء مماثلة  لا شيء اسوء من الاسماء المماثلة مثلا text و texts حيث من الصعب التفرقه بينها وتؤدي الى مشاكل بسبب سوء الفهم  5 -  اتبع تعليمات جافا للكود  اتبع تعليمات جافا في كتابه...

مقدمة عن Dagger 2

هذه المقاله تحتوي على جزئين : الجزء الاول : يحتوي على مقدمه عن مفهوم dugger2  الجزء الثاني : يحتوي على تنفيذ له مع مثال  لفهم dugger2 في الاندرويد يجب ان نفهم في البدايه هذا السوال : لماذا نحتاج   Dependency Injection ؟  هو مبني علي مفهوم عكس السيطرة invertion if control الذي ينص علي ان الكلاس يجب ان يحصل علي dependency من الخارج وبكلمه اخرى لا يجب على الكلاس نشاء instances من كلاس اخر وانما يجب ان يحصل على instances  من كلاس مخصص مثلا في جافا اذا تم انشاء كائن من خلال new هذا يعني ان الكلاس لايمكن استخدامها او اختبارها بشكل مستقل عن هذا الكلاس وهذا يسمى  hard dependency. الاعتماد الثابت ما فائده توفير التبعيات خارج الكلاس ؟ من اهم الميزات هي امكانيه اعاده الاستخدام والاختبار بصوره منفرده مستقله عن باقي الكلاسات وهذا شيء مفيد جدا الان بعد ان فهمنا قليلا دعونا نتجه الى di والان  السؤال المهم كيف نستخدم  Dependency Injection ؟ لننظر الى الماضي  يمكن ان يتم انشاء الكائن وحقنه الى الكلاس التابع وهذا يخلصنا من مشك...

Architecture patterns in Android part 2 - معماريه كتابه الكود في الاندرويد جزء 2

صورة
لان سوف يتم تنفيذ المعمارية حسب المخطط في المقاله السابقة  التطبيق تم بناء التطبيق على mvp  وقد يكون لاول مره صعب ومعقد ولكن سوف نفهمه بمرور الوقت وقد تم بناء التطبيق اعتمادا على Dagger2, Rxjava, FastAndroidNetworking and PlaceHolderView. محتويات التطبيق : يحتوي على واجهة تدجيل وواجهة رئيسية وكل منها يحتوي على بعض الاواجهات الموجودة في كل التطبيقات واذا لاحظنا الجزمه انها مقسمة الى :  data : تحتوي على كافه بيانات الوصول والتلاعب بلمكونات  di : التبعيه نوفر كلاسات تستخدم dugger 2 view : تحتوي على الواجهات مع presenter الخاص بها  service : خدمات التطبيق  utils : ملحقات التطبيق   هناك الكثير من أجزاء مثيرة للاهتمام. ولكن إذا حاولت شرح كل منهم في وقت واحد ثم أنها سوف تصبح الكثير من المعلومات في وقت واحد. لذلك، أعتقد أن أفضل نهج سيكون لشرح الفلسفات الأساسية ومن ثم يمكن للقارئ أن يكون معنى رمز من خلال التنقل الريبو المشروع. أنصحك أن تأخذ هذه الدراسة المشروع تمتد على مدى أسبوع على الأقل. دراسة الفئات الرئيسية في الترتيب ا...

Architecture patterns in Android part 1 - معماريه كتابه الكود في الاندرويد جزء 1

صورة
من الاخطاء الشائعه البدء بمشروع ولم تختار اي معماريه مناسبه للعمل عليها لماذا نحتاج الى معمارية ؟ الجواب بسيط حيث كل شي يحتاج الى الترتيب بصوره جديدة وكذلك تطبيقات الاندرويد تحتاج الى ترتيب بصوره معينه اذا تريد كود بجودة عاليه لابد من استخدام معماريه ماذا يحصل التطيبق الخاص بك من المعمارية ؟ -البساطة : تقسم و تحديد عمل كل مكون من المكونات وعدم التوجه الى المهام المتعددة للمكون , ليكون سهل الفهم والتتبع اذا حدثت مشكله ما -قابليه الاختبار : امكانيه استخدام unit test -صيانه منخفضه الكلفة : سهوله الاضافه والحذف من التطبيق قد تظهر عدة أسئلة قادمة في رأسك. -  ما هو أفضل نمط الهندسة المعمارية تطبيقات الاندرويد؟ - وكيف يمكنني تطبيق هذا النمط بأكثر الطرق فعالية؟ لا يوجد مرشح واحد الذي يناسب جميع مشاريع الاندرويد الخاص بك لأن نمط التصميم هو مجردة وتنفيذها يعتمد على متطلبات محددة. هناك بعض الانماط التي تستخدم لتطبيقات الاندرويد منها: MVC  ( Model — View — Controller) MVP  ( Model — View — Presenter) MVVM  (Model — View — ViewModel) VP  (View —...

Intelligent Job-Scheduling - جدولة الوظائف

الكثير من التطبيقات الحديثة تحتاج الى اداء العديد من المهام بشكل غير متزامن خارج تفاعل المستخدم المباشر , وهذه بعض الامثلة : تحديث موارد الشبكة  تنزيل معلومات تحديث معلومات في الخلفيه background جدولة نظام المكالمات جدولة العمل يساعد على تحسين اداء التطبيق واطالة عمر البطارية هناك الكثير من api التي يمكن استخدامها لجدولة الاعمال في الخلفية ومن هذه الخيارات هو jobScheduler  يساعد على جدوله المهام ويوفر العديد من الوظائف وانه مناسب للمهام الصغيرة والكبيرة  وايضا هناك عدة مرفقات متوفرة للمساعدة على جدولة المهام ومنها : AlarmManager Firebase JobDispathcher SyncAdapter Additional Facilities وهنا نوفر مقدمة موجزة عن jobScheduler  والمرفقات الاخري التي تساعد على جدولة المهام للتطبيق الخاص بك لتحقيق اقصى قدر من اداء التطبيق  Android Framework JobScheduler  هو api لتنفيذ المهام او العمل , اصبح متاح لنظام اندرويد 5.0 وبقى قيد التطور يسمح لك بجمع المعلومات عن المهمه التي تريد ان تنفذها وفي نفس الوقت قد يدمج بين المهمات وهذا الاسلوب يحاف...