اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم.

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

يمكنكم الإطلاع على المشروع من خلال الرابط التالي: 

 https://github.com/Motasem-Rgeiy/Library-project             

تم التعديل في بواسطة Motasem Er

Recommended Posts

  • 0
نشر

أحسنت في الإسراع لتوظيف ما تعلمته وتثبيته من خلال مشاريع عملية، الوقت الذي قضيته في بحث، قراءة، مشاهدة وممارسة سيعود عليك بنفع كبير، وسيجنبك الكثير من المعاناة التي تحدث نتيجة السرعة في دراسة الأساسيات وتخطي التعمق بها.

 المشروع به مجهود كبير بالفعل، قمت بعمل ممتاز في تطبيق المفاهيم التي تعلمتها، بدءًا من البرمجة كائنية التوجه والتعامل مع الملفات، إلى معالجة الأخطاء والتعامل مع مكتبات خارجية Selenium و openpyxl.  

لتحسين ما قمت به، عليك بإتباع الممارسات الجيدة الخاصة بالكود النظيف، فأسماء الدوال والمتغيرات يُفضل استخدام تسمية snake_case وهي كلمات صغيرة مع شرطة سفلية بينها، بمعنى webScraping تصبح web_scraping و all_dataBase_books تصبح all_database_books.

أسماء الملفات أيضًا، الأفضل استخدام snake_case كذلك، أي Autmoations.py يصبح automations.py.

وفي دالة csv_import، قمت بتحويل csv_reader إلى قائمة مرتين، في المرة الأولى، يتم استهلاك كل محتوى الملف، وفي المرة الثانية القائمة فارغة، وذلك يؤدي إلى عدم استيراد أية بيانات.

عليك بقراءة الملف مرة واحدة فقط وخزن محتواه في متغير.

وحاليًا، عند استيراد الكتب، قمت بجلب كل الكتب من قاعدة البيانات إلى الذاكرة، ثم تتحقق من وجود الكتاب المستورد، ولا مشكلة به هنا، لكن لو قاعدة البيانات كبيرة فالأداء سيتأثر بشكل كبير.

فبدلاً من جلب كل الكتب، الأفضل أن تُنفذ استعلام بسيط على قاعدة البيانات لكل كتاب مستورد للتحقق هل هو موجود بالفعل باستخدام عنوانه ومؤلفه مثلاً، الأمر الذي يقلل من استخدام الذاكرة ويزيد من سرعة التنفيذ.

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

وبالنسبة للـ webScraping فالمحدد table:nth-child(13) خاص بتصميم معين للصفحة، ولو تغير التصميم قليلاً، سيتوقف الكود عن العمل، الأفضل استخدام مُحددات عامة أكثر مثل البحث عن جدول يحتوي على عنوان معين.

وبالنسبة لقاعدة البيانات فدالة control ودالة fitch تقومان بالكثير من المهام بناءًا على قيمة نصية، الأفضل تطبيق مبدأ المسؤولية الواحدة Single Responsibility Principle وإنشاء دوال صغيرة ومحددة لكل مهمة، الأمر الذي يسمح لك عندما تحتاج لإضافة كتاب من أي مكان في الكود، ستستدعي دالة واضحة مثل dataBase.add_book(my_boo) بدلاً من dataBase.control('add', my_book).

أيضًا ابحث عن مبدأ فصل الاهتمامات Separation of Concerns سيُفيدك.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...