Ahmed Aljaberi
Ahmed Aljaberi

@ahmed_aljabri

18 تغريدة 38 قراءة Mar 21, 2020
خدمات إدارة المشاريع السحابية مثل Trello.com و Monday.com ربما يخلوا عالمنا العربي منها و ليست بالمعقدة , وجود منافسين لا يعني أنك متأخر ابداً. فلكل عميل مشاكله مع تلك الأنظمة. في هذه السلسلة سنناقش فكرة تطوير خدمات سحابية لإدارة المشاريع عن بعد .
الشركات جمعيها تعمل بنفس المبدأ , هناك مشاريع Projects و موظفين Members و مهمات أو Tasks. حتى لو كان مشروع واحد
و تحتاج لتوزيع المهام , وقياسها الإنجاز و تحتاج لأدوات مراقبة و تقارير. باقي الأشياء مجرد Features اضافية.
نبدا بالModules التي يتكون منها النظام , يجب أن يكون لدينا موديول للشركات التي هي عملائنا نسميه Companies او نسميه Customers . و نحتاج موديول Projects و Module للموظفين في تلك الشركة ومشاريعها نسميه Members او Employees.
المهات التي تستند لهم نسميها Tasks قد تكون موديول فرعي تحت الProjects هذا يعود لك كمصمم للحل.
تلك الـ Modules الاساسية التي تمثل الCore Business. لكن نحتاج لاخرى مثل إدارة عملائنا اللي هم الشركات
ممكن نسميه Subscriptions و نحتاج Modules داعمة مثل الخاصة بال Logs و الSecurity و ال Monitoring و ال Reporting و نحتاج لعملائنا Invoices و Payments ممكن تدخل تحت Subscriptions.
العلاقات واضحة لكن دائماً افضل ان تكون العلاقات في ال Applications و ليس في قاعدة البيانات. دائماً اجعل قاعدة البيانات في آخر اهتمامك فالبدء بها اولاً سينعكس سلباً على تصميم الClasses التي هي البزنس الحقيقي وليس الداتابيز.
بما أن النظام سيكون من نوع SaaS فنحتاج إلى Web Framework. لكن قد يحتاج عملائنا ايضاً لMobile Application
عندها نحتاج لAPI نربط معه الWeb و الMobile و ايضا نعطيهم امكانية الIntegration l معنا من خلال أنظمتهم
كذا نكون تحررنا بشكل كبير و نقدر نقسمهم إلى Microservices و مشروع مثل هذا من الأفضل يكون Cloud Native و ليس تقليدي. يكون مثلاً جاهز كـ DevOps بحيث يسهل علينا عملية الBuild و الTest و ال Release وال Deployment. بشكل اوتوماتيكي.
تجربة تطوير منصة Azure DevOps كانت جميلة , كانوا يعملون عن بعد بطريقة Bootstrapping . بمعنى أنهم كانوا يديرون العمل بينهم من خلال نفس النظام الذي يبنونه , كل ما احتاجوا Features اضافوها. كذا نكون أحنا اول عملائنا و متأثرين معهم.
لنبدأ نحتاج لتقييم احتياجات الشركات و أهم ال Features لهم و يمكن دراسة منتجات منافسة و نستخلص أهم مميزات منصتنا. هذا عمل المحلل و الذي يجب البدء به و ليس كما فعلت بأني دخلت في التفاصيل التقنية مباشرة.
يمكن استخدام طريقة الUI Driven Design بحيث نبدأ بتصميم الشاشات إذا كنا نجهل ال Business وإذا كنا متمكنين منه ممكن نبنيه بDomain Driven Design.
بعد إعداد ملف المواصفات و المميزات . نبدأ نوزع هذه الFeatures على Modules و من ثم نستخرج منها الUser Stories. في طرق كثيرة هنا , ممكن بدل الUser Stories نستخدم الطريقة التقليدية كالUML بالUse Cases او نستخدم طريقة الEvent Storming أي ندون أحداث النظام بدل الCases او الStories.
على سبيل المثال تحتاج الشركة للتسجيل , ثم تحديث ملفها Profile ثم تبدأ تبدأ بتعريف مشاريعها. ثم تحتاج لتعريف موظفيها لإضافتهم على تلك المشاريع و من ثم اسناد المهمات Tasks لهم. تحتاج للمراقبة و التقارير. هنا ندرس آلية تسجيل الموظفين عبر الإيميل مثلا.
علينا ان نعرف ماهي الحقول التي يحتاجها كل Entities لها , ماهي حقول الTasks , الموظفين , المشاريع , ايضاً مهم هنا ان نعرف ماهي الAggregates , لدينا الProjects يعتبر Aggregate واضح , لأنه لا يمكن اسناد Task إلا من خلاله.
فكرة ال Aggregates و الEntities اتت من الDomain Driven Design. هناك كلاسات قائمة بذاتها تعتبر وحدة واحدة مثل كلاس Task الذي يعتبر Entity. لكن إضافته او الغاءه تتم من خلال كلاس آخر هو الProject الذي يعتبر الـ Aggregate هنا او المدير.
يمكن تنفيذ النظام بأي لغة من اللغات المعروفة , ممكن جافا و ممكن دوت نت او بايثون او PHP او Ruby.
و ممكن استخدام تقنيات مثل Docker بحيث يكون كل Module عبارة عن Microservice مستقلة.
هناك الكثير جداً لكتابته و الكثير جداً من التصاميم الممكنة و طرق بناء نظام كهذا. فالتصاميم لا يوجد بها صحيح و خاطيء لكن هناك تصاميم أفضل من أخرى في حالات و وقت معين. ممكن تبدأ بالطرق التي تعرفها و تطور مع الوقت.
قاعدة البيانات لا يهم كثيراً إن كانت SQL أو NoSQL فليس لدينا بيانات مالية حساسة تتطلب ال Integrity .
يمكن استخدام RDBMS مثل MySQL او Oracle أو SQLServer و يمكن استخدام MongoDB او Cassandra
و بما اننا قررنا مثلا استخدام الMicroservices فيمكن الأنسب لكل واحدة منها. ( انتهى )

جاري تحميل الاقتراحات...