يُعتبر التنظيم الجيد للمشروع أحد أهم عوامل النجاح. في هذه المقالة، سنستعرض كيف يمكنك بسهولة تنظيم مجلدات مشروع Flutter عن طريق انشاء المجلدات باستخدام Dart تلقائيًا. بهذه الطريقة، ستتمكن من توفير الوقت والجهد وتركيز طاقتك على كتابة الكود بدلاً من تضييع الوقت في إدارة الملفات يدويًا.
أهمية تنظيم مجلدات مشروع Flutter:
- سهولة الصيانة: عندما يكون مشروعك منظمًا، يصبح من السهل التعديل أو إضافة ميزات جديدة دون الخوف من إفساد الهيكل الحالي.
- تعاون أسهل: إذا كنت تعمل مع فريق، فإن التنظيم الجيد يجعل من السهل على الجميع فهم المشروع والبحث عن الملفات اللازمة.
- تحسين الإنتاجية: بدلاً من البحث عن ملفات مفقودة أو محاولة فهم كيف تم تقسيم المشروع، يمكنك التركيز على تطوير التطبيق.
“اقرأ أيضاً: شرح Arrow Function في لغة دارت (Dart)“
انشاء المجلدات باستخدام Dart
بدلاً من إنشاء المجلدات يدويًا، يمكنك كتابة كود انشاء المجلدات باستخدام Dart ليقوم بهذه المهمة في ثوانٍ. الكود التالي يقوم بإنشاء مجلدات منظمة على أساس Clean Architecture، التي تعد أحد أشهر الأساليب المستخدمة في تطوير تطبيقات Flutter.
انشاء ملف create_folders.dart:
بعد القيام بعمل مشروع فلاتر جديد قم بانشاء ملف في جذر المشروع باسم create_folders.dart
، وضع الكود التالي بداخله:
import 'dart:io'; void main() { // مسار المشروع الحالي final projectPath = "${Directory.current.path}/lib"; // قائمة المجلدات التي سيتم إنشاؤها final directories = [ '$projectPath/core/utils', '$projectPath/data/models', '$projectPath/data/repositories', '$projectPath/data/datasources', '$projectPath/domain/entities', '$projectPath/domain/repositories', '$projectPath/domain/usecases', '$projectPath/presentation/pages', '$projectPath/presentation/widgets', ]; // حلقة لإنشاء كل المجلدات for (var dir in directories) { final directory = Directory(dir); // التحقق من وجود المجلد، وإن لم يكن موجودًا يتم إنشاؤه if (!directory.existsSync()) { directory.createSync(recursive: true); print('Created: $dir ✔'); } else { print('Directory already exists: $dir '); } } print('تم إنشاء المجلدات بنجاح ✔'); }
كيفية تشغيل الكود:
افتح التيرمنال أو الـ Command Line الخاص بك، واذهب إلى مسار المشروع. لتشغيل الكود، استخدم الأمر التالي:
dart create_folders.dart
نتيجة تشغيل الكود:
بمجرد تشغيل كود انشاء المجلدات باستخدام Dart، ستجد المجلدات التالية قد تم إنشاؤها تلقائيًا داخل مجلد lib
الخاص بمشروعك:
core/utils
data/models
data/repositories
data/datasources
domain/entities
domain/repositories
domain/usecases
presentation/pages
presentation/widgets
كل مجلد من هذه المجلدات يندرج تحت نطاق معين في مشروعك، وهو ما يساعد في تقسيم المهام والملفات بطريقة منهجية.
“اقرأ أيضاً: شرح استخدام ويدجت ClipOval في فلاتر“
شرح هيكل الـ Clean Architecture في فلاتر
لنفهم كيف يتم تقسيم المشروع باستخدام الـ Clean Architecture، إليك لمحة عن كل قسم:
- Core:
يحتوي على الأدوات العامة التي قد تحتاجها في كل أجزاء المشروع، مثل أدوات التعامل مع الـ API أو التنسيقات المشتركة. - Data:
هذا المجلد يحتوي على الطبقات المسؤولة عن الحصول على البيانات، سواء كانت من قاعدة بيانات محلية أو من الإنترنت. يتم تقسيمه إلى:- Models: تخزين نماذج البيانات.
- Repositories: الطبقة الوسيطة بين البيانات والمنطق Logic.
- Datasources: مصادر البيانات المختلفة.
- Domain:
يحتوي على منطق الأعمال (Business Logic) الخاص بالتطبيق. يتم تقسيمه إلى:- Entities: الكيانات أو النماذج المستخدمة في التطبيق.
- Repositories: الواجهة التي تربط بين البيانات ومنطق الأعمال Business Logic.
- Usecases: حالات الاستخدام المحددة التي تمثل الوظائف الأساسية للتطبيق.
- Presentation:
يحتوي على الشاشات والـ Widgets التي تعرض الواجهة الأمامية UI للتطبيق، وتنقسم إلى:- Pages: الصفحات الرئيسية.
- Widgets: عناصر ويدجت قابلة لإعادة الاستخدام.
“اقرأ أيضاً: 10 تمارين محلولة على Null Safety في دارت“
شرح هيكل MVC في مشروع Flutter
يُعد MVC (Model-View-Controller) أحد أشهر الأنماط المعمارية لتنظيم الأكواد في تطبيقات Flutter أو أي تطبيقات برمجية بشكل عام.
يوفر MVC فصلاً واضحًا بين البيانات (Model)، الواجهة (View)، والمنطق الذي يتحكم في كيفية عرض البيانات والتفاعل معها (Controller). هذا الفصل يسهل على المطورين الحفاظ على الكود وتنظيمه وتحديثه بمرور الوقت.
تقسيم هيكل MVC:
- Model:
الجزء الذي يحتوي على نماذج البيانات والتعامل مع مصادر البيانات (مثل قواعد البيانات أو واجهات برمجة التطبيقات API). - View:
الجزء الذي يحتوي على واجهة المستخدم (UI) التي تعرض البيانات على الشاشة وتتعامل مع تفاعل المستخدم. - Controller:
الجزء الذي يحتوي على المنطق Logic الذي يربط بين الـ Model والـ View. يتحكم في التدفق بينهما ويوفر التفاعل بين المستخدم والبيانات.
كود انشاء المجلدات باستخدام Dart هيكل MVC:
import 'dart:io'; void main() { // مسار المشروع الحالي final projectPath = "${Directory.current.path}/lib"; // قائمة المجلدات التي سيتم إنشاؤها final directories = [ '$projectPath/models', // Model '$projectPath/views', // View '$projectPath/controllers', // Controller ]; // حلقة لإنشاء كل المجلدات for (var dir in directories) { final directory = Directory(dir); // التحقق من وجود المجلد، وإن لم يكن موجودًا يتم إنشاؤه if (!directory.existsSync()) { directory.createSync(recursive: true); print('Created: $dir ✔'); } else { print('Directory already exists: $dir '); } } print('تم إنشاء المجلدات بنجاح ✔'); }
نتيجة تشغيل الكود:
بمجرد تشغيل كود انشاء المجلدات باستخدام Dart، سيتم إنشاء المجلدات التالية داخل مجلد lib
:
models
views
controllers
تنظيم هيكل MVC في فلاتر:
إذا كنت بحاجة إلى مزيد من التنظيم أو كنت تعمل على مشروع أكبر، يمكنك إضافة مجلدات فرعية داخل كل قسم من الأقسام الثلاثة. على سبيل المثال، يمكنك إضافة مجلدات لكل شاشة أو نموذج داخل controllers و views.
مثال لتنظيم إضافي انشاء المجلدات باستخدام Dart:
final directories = [ '$projectPath/models/user', // Model خاص بالمستخدمين '$projectPath/models/product', // Model خاص بالمنتجات '$projectPath/views/user', // View خاص بالمستخدمين '$projectPath/views/product', // View خاص بالمنتجات '$projectPath/controllers/user', // Controller خاص بالمستخدمين '$projectPath/controllers/product', // Controller خاص بالمنتجات ];
“اقرأ أيضاً: شرح استخدام ويدجت BackdropFilter في فلاتر “
ما هو التقسيم المناسب لمشروعك؟
يمكن تعديل هذا الهيكل ليناسب احتياجات مشروعك الخاص. على سبيل المثال، إذا كنت تعمل على مشروع صغير ولا تحتاج لكل هذا التقسيم، يمكنك إزالة بعض المجلدات غير الضرورية. فقط قم بتعديل القائمة directories
في الكود لتتناسب مع متطلباتك.
مثال للتقسيم المجلدات:
final directories = [ '$projectPath/core', '$projectPath/models', '$projectPath/widgets', ];
نصائح إضافية لتنظيم المشاريع
- استخدام الـ Git:
دائمًا استخدم نظام تحكم في الإصدارات مثل Git لمتابعة التغييرات في ملفاتك ومشاركة العمل مع فريقك. - التوثيق:
قم بتوثيق كل جزء من مشروعك، سواء كان ذلك في الكود نفسه أو عبر مستندات خارجية، لتسهيل الصيانة لاحقًا. - تنظيم الـ Assets:
لا تنسَ تنظيم المجلدات الخاصة بالصور والخطوط والملفات الصوتية داخل مجلدassets
.
“اقرأ أيضاً: شرح استخدام FlutterToast في Flutter“
تنظيم مشروعك من البداية يوفر عليك الكثير من الجهد في المستقبل. باستخدام كود انشاء المجلدات باستخدام Dart، يمكنك إعداد الهيكل الأساسي لمشروعك Flutter في ثوانٍ، مع ضمان أنه منظم وجاهز للتطوير.