هيكل الدليل للمشروع (ولا سيما على قارورة)

ستجيب المقالة على السؤال الذي تسبب في ضياع الوقت للعديد من المبرمجين: ما هي بنية الدليل التي يجب استخدامها لمشروع مستقبلي أو حالي؟ ما هي البنية الأكثر مثالية ليس فقط للمفهوم الحالي للمشروع ، ولكن لن تكون مؤلمة للغاية في المستقبل من حيث توسيع المشروع أو تقسيمه إلى أجزاء؟

الجذر


وهكذا بدأنا المشروع. فليكن أسهل مشروع myapp. نقوم بإنشاء دليل له في المجلد الرئيسي للتطوير (لدي هذا Devel).

mkdir myapp cd myapp 

في المستقبل ، ستكون جميع الإجراءات داخل كتالوج المشروع الرئيسي

جيت


تهيئة مستودع فارغ

 git init 

.gitignore


 #   *.pyc *.pyo **/__pycache__/ #      **/config/ #       **/data/ **/logs/ #        (  ) **/bin/ 

اقرأ لي


الخطوة التالية هي إنشاء ملف README المطلوب. يحتوي هذا الملف على الوصف الرئيسي والمهم لمشروعنا المستقبلي. يقوم البعض بعمل ملف نصي / عادي يسمى README.txt. في البوابات الكبيرة ، يتم قبول المستودعات لمعيار Markdown باسم README.md. أنا أفضل أتش تي أم أل ، لأنه إنه أكثر ملاءمة بالنسبة لي لإجراء تحديدات الألوان ، وتضمين الروابط ، والصور والوسائط المتعددة الأخرى ، وفتحها في متصفح ، وتضمين أجزاء من التعليمات البرمجية في علامات <pre> و <code> ، واستخدام أطر جاهزة مثل Bootstrap للديكور وغيرها من السحر خارج Hogwarts. وفقا لذلك ، اسم README.html

 touch README.html 

إذا تم تنفيذ المشروع من قبل عدة فرق ، فإنني أوصي بأن يكون لكل فريق ملف README الخاص به داخل كل وحدة أو مكون أو مكتبة تم تطويرها بشكل مستقل ، إلخ.

التطبيق


أقوم بتسمية دليل التطبيق الرئيسي بنفس طريقة دليل المشروع. في حالة هذه المقالة ، myapp

 mkdir myapp touch myapp/__init__.py 

الوحدات والمكونات


داخل دليل التطبيق ، يتم إنشاء __init__.py افتراضيًا ، ويحتوي على رمز التهيئة للتطبيق وربط جميع الأجزاء الضرورية بالتطبيق. على وجه الخصوص ، هذه هي المخططات لعناوين URL مفردة الفرع أو مساحة الاسم لمنطق خدمة منفصلة ، ولكن بعناوين URL مختلفة (مثال بسيط هو إنشاء مساحة اسم لخدمة مقالة مدونة ، حيث توجد مسارات مختلفة بشكل واضح للنموذج / الصفحات و / صفحة / معرف)

 mkdir myapp/bp_component touch myapp/bp_component/__init__.py 

أو

 mkdir myapp/ns_component touch myapp/ns_component/__init__.py 

نموذج DB


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

 mkdir myapp/models touch myapp/models/__init__.py touch myapp/models/page.py 

قوالب لمحرك القالب


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

 mkdir myapp/templates mkdir myapp/templates/html mkdir myapp/templates/js mkdir myapp/templates/css 

ألاحظ أنه في هذه الحالة ، فإن الدليل الفرعي js و css ليس لتخزين مكتبات جافا سكريبت أو أنماط CSS الثابتة ، ولكن للكود القابل للتغيير أو رمز المعلمة أو التعليمات البرمجية المضمنة. على سبيل المثال ، إذا كان هناك مكون لعرض التقويم مع وظائف إضافية متصلة بالأزرار ، فسيكون أكثر ملاءمة لوضع مكون التقويم في js ، ولتمكين المكون في ملفات html ، ولكن مع المعلمات الضرورية. ربما سيبدو هذا وكأنه نوع من الهراء لشخص ما ، ولكنه أفضل بكثير من إنشاء مكتبة تقويم ثابتة جاهزة ، وبعد نصف عام أو عام لفهم أنك بحاجة إلى إضافة اثنين من الخصائص والأساليب الأخرى إلى المكون (على سبيل المثال ، جعل datepicker ليس فقط في شكل شهر واحد ، ولكن وإضافة القدرة على تحويله إلى تقويم لمدة عام) ، وأي نوع من السحر كان بداخله ، لن يتذكره أحد. ستعطي الإدخالات المزيد من الشفافية.

الاستاتيكا


هنا ، جميع الأنماط الرئيسية التي لا تتغير أبدًا (أو نادرًا للغاية التغيير) هي الأنماط والصور والأصوات ومكتبات وإطارات JS.

 mkdir myapp/static mkdir myapp/static/css mkdir myapp/static/js mkdir myapp/static/images 

مكتبة الوظائف


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

 mkdir myapp/lib touch myapp/lib/__init__.py 

الإعدادات والتكوين


كيفية تخزين الإعدادات التي تحدد إعدادات التطبيق العامة؟ كم عدد المعارك في هذا الصدد ولم تحسب. بدون تفاصيل ، كيف أفعل ذلك: أقوم بتخزينه كوحدة Python في دليل منفصل. الملفات الداخلية لأوضاع التشغيل المختلفة.

 mkdir config echo "CONFIG = 'config.devel'" > config/__init__.py touch config/devel.py touch config/prod.py 

لماذا الحمر؟ نعم ، لأن تحليل XML و YAML و INI وغير ذلك من الهراء ، عندما يكون من السهل إنشاء متغيرات من النموذج في متناول اليد ، لم يتم تمريرها إلى أي شخص:

 import os DEBUG = True TITLE = 'SpecialistOff.NET' DIR_BASE = '/'.join(os.path.dirname(os.path.abspath(__file__)).split('/')[:-1]) DIR_DATA = DIR_BASE + '/data' DIR_FILES = DIR_DATA + '/files' MIMETYPES = { 'gif': 'image/gif', 'jpg': 'image/jpeg', 'jpeg': 'image/jpeg', 'png': 'image/png', 'txt': 'text/plain' } SERVERS = [ {'name': 'server1', 'IP': '8.8.8.8', 'port': '80'} ] 

البيانات


يتم تخزين الملفات والسجلات والبيانات الأخرى التي تم تحميلها أثناء العملية في دليل بيانات منفصل

 mkdir data mkdir data/files 

الاختبار


وحدات الاختبار والتركيبات

 mkdir tests mkdir tests/fixture touch tests/__init__.py touch test.py chmod +x test.py 

التوثيق


يجب أن تبقى جميع وثائق المشروع منفصلة. أستخدم دليل المستندات لهذا وأخزنه كصفحات ويب ثابتة مع نقطة إدخال index.html. هذا مناسب لأنني يمكنني مشاركة دليل توثيق منفصل من خلال أي خادم ويب. أو تصفح مباشرة من الدليل باستخدام أي متصفح ويب (بما في ذلك وحدة التحكم مثل lynx و elinks).

 mkdir doc touch doc/index.html 

النشر


كل هذا يتوقف على المهام. وفي التعليقات (في رأيي المتواضع) ليست هناك حاجة خاصة.

 mkdir deploy touch deploy/requirements.txt touch deploy/build.sh mkdir deploy/config touch deploy/config/__init__.py touch deploy/config/demo.py mkdir deploy/cron touch deploy/cron/myapp mkdir deploy/docker touch deploy/docker/Dockerfile touch deploy/docker/docker-compose.yml mkdir deploy/nginx touch deploy/nginx/myapp.conf mkdir deploy/uwsgi touch deploy/uwsgi/conf.ini mkdir deploy/uwsgi/conf.d touch deploy/uwsgi/conf.d/myapp.conf 

تسجيل الدخول


هنا يمكنك إضافة سجلات لإطلاق الاختبار أو استنتاجات التطبيق نفسه.

 mkdir logs 

البرامج النصية والأدوات المساعدة


 mkdir utils touch utils/useradd.py chmod +x utils/useradd.py 

بدلا من الاستنتاج


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

Source: https://habr.com/ru/post/ar421887/


All Articles