الفرق بين العمارة الأحادية (Monolithic) والمايكروسيرفيس (Microservices) يكمن في كيفية بناء الأنظمة البرمجية. في العمارة الأحادية، يتم تصميم التطبيق ككتلة واحدة مترابطة، حيث تكون جميع الأجزاء مثل الواجهة الأمامية والخلفية وقاعدة البيانات متصلة مع بعضها بشكل مباشر. هذا النوع مناسب للتطبيقات الصغيرة والمتوسطة لأنه بسيط وسهل في البداية، لكن إذا كبر المشروع يصبح تعديل أو توسيع النظام معقدًا.
أما المايكروسيرفيس، فهي تعتمد على تقسيم التطبيق إلى خدمات صغيرة مستقلة، وكل خدمة تقوم بمهمة محددة ويمكن تشغيلها أو تحديثها دون التأثير على بقية النظام. هذا النوع من العمارة يوفر مرونة كبيرة ويجعل التوسع أسهل، خاصة للتطبيقات الكبيرة والمعقدة. ولكنها تحتاج إلى خبرة أكبر في التصميم والبنية التحتية، لأنها تضيف طبقة من التعقيد في الاتصال بين الخدمات.
بالتالي، إذا كان المشروع بسيطًا وصغيرًا، فالعمارة الأحادية تكون خيارًا أفضل. أما إذا كان المشروع كبيرًا ويتطلب توسعًا مستمرًا، فالمايكروسيرفيس هي الحل الأنسب.
أما المايكروسيرفيس، فهي تعتمد على تقسيم التطبيق إلى خدمات صغيرة مستقلة، وكل خدمة تقوم بمهمة محددة ويمكن تشغيلها أو تحديثها دون التأثير على بقية النظام. هذا النوع من العمارة يوفر مرونة كبيرة ويجعل التوسع أسهل، خاصة للتطبيقات الكبيرة والمعقدة. ولكنها تحتاج إلى خبرة أكبر في التصميم والبنية التحتية، لأنها تضيف طبقة من التعقيد في الاتصال بين الخدمات.
بالتالي، إذا كان المشروع بسيطًا وصغيرًا، فالعمارة الأحادية تكون خيارًا أفضل. أما إذا كان المشروع كبيرًا ويتطلب توسعًا مستمرًا، فالمايكروسيرفيس هي الحل الأنسب.
👍1
هل دريت إنك تقدر تشتغل بميزة اسمها Source Generators من .NET 5 ومافوق
ذي ميزة أضافتها مايكروسوفت في .NET 5، وتخليك تولد كود أثناء وقت الترجمة (Compile Time) بناءً على الكود اللي كتبته.
فكرة Source Generators إنك تقدر تكتب كود يساعد على تحسين الأداء وتقليل التكرار في وقت التشغيل (Runtime). يعني مثلًا لو عندك كود بيتكرر كثير وتريد تحسن من أداء التطبيق، تقدر تستخدمها عشان تولد كود تلقائي يوفر عليك الجهد.
ذي الميزة مفيدة بشكل كبير في حالات مثل توليد أكواد الـ DTOs أو الـ Mapping Classes، وبدون الحاجة لمكتبات خارجية مثل AutoMapper في بعض السيناريوهات.
دور Source Generators الأساسي هو تقليل التكرار وتوليد كود إضافي في وقت الترجمة. وأيضًا في حالات تحتاج فيها كود ديناميكي بناءً على لوجيك معيّن، فذي الميزة بتساعد تخلي كودك نظيف وتقلل من استخدام if else وأشياء كثيرة غيرها.
ذي ميزة أضافتها مايكروسوفت في .NET 5، وتخليك تولد كود أثناء وقت الترجمة (Compile Time) بناءً على الكود اللي كتبته.
فكرة Source Generators إنك تقدر تكتب كود يساعد على تحسين الأداء وتقليل التكرار في وقت التشغيل (Runtime). يعني مثلًا لو عندك كود بيتكرر كثير وتريد تحسن من أداء التطبيق، تقدر تستخدمها عشان تولد كود تلقائي يوفر عليك الجهد.
ذي الميزة مفيدة بشكل كبير في حالات مثل توليد أكواد الـ DTOs أو الـ Mapping Classes، وبدون الحاجة لمكتبات خارجية مثل AutoMapper في بعض السيناريوهات.
دور Source Generators الأساسي هو تقليل التكرار وتوليد كود إضافي في وقت الترجمة. وأيضًا في حالات تحتاج فيها كود ديناميكي بناءً على لوجيك معيّن، فذي الميزة بتساعد تخلي كودك نظيف وتقلل من استخدام if else وأشياء كثيرة غيرها.
في مشاريع التخرج وفي سوق العمل بشكل عام... بينتهي بنا الأمر بقاعده بيانات ضخمة جداً.. وعشان نفعل التقارير بينتهي بنا الأمر في SQL مشابه لهذا 🙂💔
طبعاً هذه الصورة مقصوصة بسبب خصوصية السورس كود، والكويري حرفياً اكبير من هذا بكثير وفيبه joins كثيره جداً
مشكلة الكويري هذا لما البيانات كبيرة انه كان يأخذ وقت تقريباً 2 الى 5 دقائق عشان يشتغل 🤕
هذا اذا كان مجموع الrows الناتجه 100 ألف صف... فكيف لو كان مليون او أكثر!؟
فهنا بتكلم في سلسلة رسائل تشرح طريقه واحده لتحسين الكويري...
سبب عملي للسلسة هذه لان الحل المتواجد معي طويل جداً ولازم نرجع الى ايام سنه ثانيه لكي نعرف الحل
كذلك مع أسلوب البارتات سأترك للكم مجال التفكير فقد ربما تجيدوا حل أفضل بكثير وتشاركوه للجميع...
#سلسلة #DB
رد على هذا البوست :
أول انت في نفس النظام وقاعدة بيانات واحده عليك أول شيء ان تتجه إلى الحل الأبسط خطوة بخطوة والله ياعم الحج في عمليات joins على الداتابيز على أكثر من جدول كثيرة أول حل تتجه له هو عمل none indexes والله زاد الضغط اتجه لعمل cashing لل لعمليات الأكثر تكرار في عدت طرق لل كاش سوى in memory او redis أو غيرها طيب عملت الحل الأولي ده شفت بعد فترة في load على السيرفر هنا تتوجه لحل metalized view وفكرته واضحه سيتم فيه تخزين البيانات الي هتحتاجها من كل جدول أنت الآن هنا عليك أن تركز حفظ البيانات كيف بتم في هذا النقطة لو مثلا أضافة إلى جدول ما بيانات ضروري تكون العملية synchronously في نفس transaction هنا تكامل شي يعرف ب strong concency ايش يعني عندما تضيف البيانات في جدولٍ ما هيعمل تحديث في نفس اللحظه على المترليز فيو
بعد فتره من الزمن الضغط زاد هو الحل ايه ياسطى الآن عليك أن تتجه إلى نمط بمايسمى CQRS => command query responsibility segregation
وهذا التصميم فكرته فصل عملية التغير عن الداتابيز ك command و عمليات القراءة ك query ده هيحسن الأداء بكثير والله بعد فترة من الزمن لحظة ان الضغط زاد اكثر هنا عليك أن تفصل عمليات ال queries على داتابيز أخرى الأفضل NoSQL documents اذا كانت بياناتك مش معقدة إلى حد كبير تمام يابش مهندس مثلا ضفت سجل جديدا كيف سأحدثه في داتابيز NoSQL والله ياسطى هتتصل مع هذا القاعدة مثل مابتتصل مع القاعدة الأساسية تمام بس متى بيحفظ شف عند أي عمليه سوى حذف أو إضافة عمليات تغيير على الداتابيز وانت بتعملها حفظ في كودك هناك هيكون في واجهه أخرى ستتعامل معها وتستخدم دوالها من أجل أن تبعت البيانات المطلوبة تحدثها في داتابيز ال NoSQL لكن طيب حفظت افترض حدث خطأ أثناء عملية الحفظ في الداتابيز الأساسية عمنا قد راح وحدث في الداتابيز الأخرى دي مشكله مع العلم حتى ولو حفظ البيانات لا تحفظ في نفس اللحظه في latency قد يكون network أو غيرها وهذا مايعرف ب evaluation conceny أي بمعنى أحدث ايحين ما أحدث أهم شيء هيحدث
نرجع للمشكلة كيف نحله هنا ستتجه إلى massaging asynchronous
سوى هتستخدم rabbitmq او Kafka حسب طلبك .
طيب لماذا لم اتجه الى هذا الحل كن الأول لاتفكر ياصديقي بل حلول التي ستعقد بها نظامك نعم انت حليت مشكله بس فتحت مشاكل سواء كان جانب صيانه وغيرها هذا كلام بسيط جدا ان راودك عقلك كيف يعني ؟
استخدم
Query Optimization مثل Execution Plan Analysis لمعرفة أضعف النقاط
مع العلم لو استخدمة metalized view وفي عمليات تغيير على الداتابيز كثير ستكون العمليات التحديث مكلفة على الفيو .
وشكرًا!
طبعاً هذه الصورة مقصوصة بسبب خصوصية السورس كود، والكويري حرفياً اكبير من هذا بكثير وفيبه joins كثيره جداً
مشكلة الكويري هذا لما البيانات كبيرة انه كان يأخذ وقت تقريباً 2 الى 5 دقائق عشان يشتغل 🤕
هذا اذا كان مجموع الrows الناتجه 100 ألف صف... فكيف لو كان مليون او أكثر!؟
فهنا بتكلم في سلسلة رسائل تشرح طريقه واحده لتحسين الكويري...
سبب عملي للسلسة هذه لان الحل المتواجد معي طويل جداً ولازم نرجع الى ايام سنه ثانيه لكي نعرف الحل
كذلك مع أسلوب البارتات سأترك للكم مجال التفكير فقد ربما تجيدوا حل أفضل بكثير وتشاركوه للجميع...
#سلسلة #DB
رد على هذا البوست :
أول انت في نفس النظام وقاعدة بيانات واحده عليك أول شيء ان تتجه إلى الحل الأبسط خطوة بخطوة والله ياعم الحج في عمليات joins على الداتابيز على أكثر من جدول كثيرة أول حل تتجه له هو عمل none indexes والله زاد الضغط اتجه لعمل cashing لل لعمليات الأكثر تكرار في عدت طرق لل كاش سوى in memory او redis أو غيرها طيب عملت الحل الأولي ده شفت بعد فترة في load على السيرفر هنا تتوجه لحل metalized view وفكرته واضحه سيتم فيه تخزين البيانات الي هتحتاجها من كل جدول أنت الآن هنا عليك أن تركز حفظ البيانات كيف بتم في هذا النقطة لو مثلا أضافة إلى جدول ما بيانات ضروري تكون العملية synchronously في نفس transaction هنا تكامل شي يعرف ب strong concency ايش يعني عندما تضيف البيانات في جدولٍ ما هيعمل تحديث في نفس اللحظه على المترليز فيو
بعد فتره من الزمن الضغط زاد هو الحل ايه ياسطى الآن عليك أن تتجه إلى نمط بمايسمى CQRS => command query responsibility segregation
وهذا التصميم فكرته فصل عملية التغير عن الداتابيز ك command و عمليات القراءة ك query ده هيحسن الأداء بكثير والله بعد فترة من الزمن لحظة ان الضغط زاد اكثر هنا عليك أن تفصل عمليات ال queries على داتابيز أخرى الأفضل NoSQL documents اذا كانت بياناتك مش معقدة إلى حد كبير تمام يابش مهندس مثلا ضفت سجل جديدا كيف سأحدثه في داتابيز NoSQL والله ياسطى هتتصل مع هذا القاعدة مثل مابتتصل مع القاعدة الأساسية تمام بس متى بيحفظ شف عند أي عمليه سوى حذف أو إضافة عمليات تغيير على الداتابيز وانت بتعملها حفظ في كودك هناك هيكون في واجهه أخرى ستتعامل معها وتستخدم دوالها من أجل أن تبعت البيانات المطلوبة تحدثها في داتابيز ال NoSQL لكن طيب حفظت افترض حدث خطأ أثناء عملية الحفظ في الداتابيز الأساسية عمنا قد راح وحدث في الداتابيز الأخرى دي مشكله مع العلم حتى ولو حفظ البيانات لا تحفظ في نفس اللحظه في latency قد يكون network أو غيرها وهذا مايعرف ب evaluation conceny أي بمعنى أحدث ايحين ما أحدث أهم شيء هيحدث
نرجع للمشكلة كيف نحله هنا ستتجه إلى massaging asynchronous
سوى هتستخدم rabbitmq او Kafka حسب طلبك .
طيب لماذا لم اتجه الى هذا الحل كن الأول لاتفكر ياصديقي بل حلول التي ستعقد بها نظامك نعم انت حليت مشكله بس فتحت مشاكل سواء كان جانب صيانه وغيرها هذا كلام بسيط جدا ان راودك عقلك كيف يعني ؟
استخدم
Query Optimization مثل Execution Plan Analysis لمعرفة أضعف النقاط
مع العلم لو استخدمة metalized view وفي عمليات تغيير على الداتابيز كثير ستكون العمليات التحديث مكلفة على الفيو .
وشكرًا!
👍1
لمحة 👀 برمجية
في مشاريع التخرج وفي سوق العمل بشكل عام... بينتهي بنا الأمر بقاعده بيانات ضخمة جداً.. وعشان نفعل التقارير بينتهي بنا الأمر في SQL مشابه لهذا 🙂💔 طبعاً هذه الصورة مقصوصة بسبب خصوصية السورس كود، والكويري حرفياً اكبير من هذا بكثير وفيبه joins كثيره جداً مشكلة…
شكرا لك يا عزيزي لتوضيح فكرتك الجميله
السلسلة هذه كانت نقل لما اختارته شركة برمجيه في سوق العمل ، وكما هو واضح أكثر من الصورة حجم الـ DB الاساسية (تعتبر متوسطه نوعا ما ، لا كبيره ولا صغيرة ، ولكن غالباَ مقارنه بالمشاريع المعروفه لدي انا الـ db اشوفها كبيره جداً)
وبرغم هذا ما فيش اي مشكله من الي مذكورة هنا
لا أقول ان طريقتهم الأصح ، ولا أقول ان طريقتك الأصح... انا - كما قلت في بدايه الرسائل - مجرد ناقل للفكره + وهي شغالة بكفاءة 👍🏻
+ شكرا لك للمشاركه 👍🏻
السلسلة هذه كانت نقل لما اختارته شركة برمجيه في سوق العمل ، وكما هو واضح أكثر من الصورة حجم الـ DB الاساسية (تعتبر متوسطه نوعا ما ، لا كبيره ولا صغيرة ، ولكن غالباَ مقارنه بالمشاريع المعروفه لدي انا الـ db اشوفها كبيره جداً)
وبرغم هذا ما فيش اي مشكله من الي مذكورة هنا
لا أقول ان طريقتهم الأصح ، ولا أقول ان طريقتك الأصح... انا - كما قلت في بدايه الرسائل - مجرد ناقل للفكره + وهي شغالة بكفاءة 👍🏻
+ شكرا لك للمشاركه 👍🏻
🔥1
Forwarded from اللجنة العلمية CS 22 (Ayham Al-Akhali)
✅كافة البوتات المجانية التي يحتاجها طلبة الجامعات
✅بوت دمج الملفات
⌛️ t.me/engala1/749
✅كتابة البحوث التقارير :
⌛️ t.me/engala1/3846
✅ ترجمة ملفات PDF مجاناً :
⌛️ t.me/engala313/604
✅- حل اسئلة الرياضيات :
⌛️ t.me/engala1/683
✅ تحويل الملفpdf الى Word
⌛️ t.me/engala1/743
✅-تحويل الصورة الى PDF مجاناً :
⌛️ t.me/coolry100/135
✅ استخراج النص من الصورة
⌛️ t.me/coolry100/128
✅بوت تنزيل التقارير
⌛️ t.me/engala1/3846
✅بوت تنزيل البحوث
⌛️ t.me/engala1/3856
✅بوت ترجمة الملفات
⌛️ t.me/coolry100/126
✅بوت الكروبات الجامعية
🌐 @COLRY77BOT
✅بوت قبولاتي
@Myuniversity10bot
بوت شرح جامعي👇
t.me/coolry111/399
⚠️ بوت تقارير فقط اكتب عنوانك.
يعطيك تقرير كامل
🌐 @REPORTPRO_3BOT
📒بوت شرح جامعي كل ماتحتاجه موجود بالبوت👇
ترجمة:
كتابه تقرير:
دمج ملفات:
حذف صفحات:
🌐 @COLRY72BOT
بوت أستخراج أي نص موجود في الصورة 📗
@COLRYBOT
⚜️بوت تحويل الصوت الى نص
🌐 @COLRY90BOT
❤️ اهلا بك المساعد الجامعي في بوت الإمتحانات
📃 يمكنني عمل اسئله MCQ !
معرف البــــــــــــوت
🌐 @Quizmcq3Bot
بوت حلول
@ALAAHDGBOT
✅بوت دمج الملفات
⌛️ t.me/engala1/749
✅كتابة البحوث التقارير :
⌛️ t.me/engala1/3846
✅ ترجمة ملفات PDF مجاناً :
⌛️ t.me/engala313/604
✅- حل اسئلة الرياضيات :
⌛️ t.me/engala1/683
✅ تحويل الملفpdf الى Word
⌛️ t.me/engala1/743
✅-تحويل الصورة الى PDF مجاناً :
⌛️ t.me/coolry100/135
✅ استخراج النص من الصورة
⌛️ t.me/coolry100/128
✅بوت تنزيل التقارير
⌛️ t.me/engala1/3846
✅بوت تنزيل البحوث
⌛️ t.me/engala1/3856
✅بوت ترجمة الملفات
⌛️ t.me/coolry100/126
✅بوت الكروبات الجامعية
🌐 @COLRY77BOT
✅بوت قبولاتي
@Myuniversity10bot
بوت شرح جامعي👇
t.me/coolry111/399
⚠️ بوت تقارير فقط اكتب عنوانك.
يعطيك تقرير كامل
🌐 @REPORTPRO_3BOT
📒بوت شرح جامعي كل ماتحتاجه موجود بالبوت👇
ترجمة:
كتابه تقرير:
دمج ملفات:
حذف صفحات:
🌐 @COLRY72BOT
بوت أستخراج أي نص موجود في الصورة 📗
@COLRYBOT
⚜️بوت تحويل الصوت الى نص
🌐 @COLRY90BOT
❤️ اهلا بك المساعد الجامعي في بوت الإمتحانات
📃 يمكنني عمل اسئله MCQ !
معرف البــــــــــــوت
🌐 @Quizmcq3Bot
بوت حلول
@ALAAHDGBOT
Telegram
المكتبة الجامعية 📚
✅دمج الملفات دخل هنا👇
t.me/coolry100/139
t.me/coolry100/139
لمحة 👀 برمجية pinned «✅كافة البوتات المجانية التي يحتاجها طلبة الجامعات ✅بوت دمج الملفات ⌛️ t.me/engala1/749 ✅كتابة البحوث التقارير : ⌛️ t.me/engala1/3846 ✅ ترجمة ملفات PDF مجاناً : ⌛️ t.me/engala313/604 ✅- حل اسئلة الرياضيات : ⌛️ t.me/engala1/683 ✅ تحويل الملفpdf الى…»
لمحة 👀 برمجية
شكرا لك يا عزيزي لتوضيح فكرتك الجميله السلسلة هذه كانت نقل لما اختارته شركة برمجيه في سوق العمل ، وكما هو واضح أكثر من الصورة حجم الـ DB الاساسية (تعتبر متوسطه نوعا ما ، لا كبيره ولا صغيرة ، ولكن غالباَ مقارنه بالمشاريع المعروفه لدي انا الـ db اشوفها كبيره…
من كلامي ومن كلامهم كلنا واحد 💪 لاشكر على واجب.
👌1
قد سمعت عن Command Design Pattern هذا أسلوب برمجي يشتيك ترتب أوامرك وتخلي كل واحد له كائنه الخاص به بحيث ما عاد يحتاج النظام يتعب نفسه يفهم التفاصيل يعني كل أمر مثل شغل المكيف أو طفي النور بيكون ملفوف بكائن مستقل جاهز ينفذ نفسه
الفكرة بسيطة
تصنع واجهة تقول Execute أو نفذ
كل أمر تدي له كائن والكائن هذا يشل معه كل المعلومات اللي يحتاجها للتنفيذ
بعدها عندك Invoker أو المرسل هذا اللي يمسك الأوامر وينفذها
ليش هذا الأسلوب رهيب لأنه
تقدر تخزن الأوامر وتنفذها متى ما تشتي
لو شتي تضيف خاصية تراجع Undo تسويها بكل سهولة
النظام يظل بسيط وقابل للتطوير مهما كبرت شغلتك
تخيل أنك تصمم نظام بيت ذكي تقول افتح الباب الكائن يشتي يفهم بس كيف يفتح الباب مش شغله يعرف مين قال له تقول ارجع أغلق الباب نفس الطريقة كل شيء مرتب بدون ما ترجع تغير كل الشيفرة
باختصار هذا النمط ينفعك ترتب أمورك زي اللي يخزن الأوامر ويمشي عليها خطوة بخطوة بلا زحمة ولا فوضى.
الفكرة بسيطة
تصنع واجهة تقول Execute أو نفذ
كل أمر تدي له كائن والكائن هذا يشل معه كل المعلومات اللي يحتاجها للتنفيذ
بعدها عندك Invoker أو المرسل هذا اللي يمسك الأوامر وينفذها
ليش هذا الأسلوب رهيب لأنه
تقدر تخزن الأوامر وتنفذها متى ما تشتي
لو شتي تضيف خاصية تراجع Undo تسويها بكل سهولة
النظام يظل بسيط وقابل للتطوير مهما كبرت شغلتك
تخيل أنك تصمم نظام بيت ذكي تقول افتح الباب الكائن يشتي يفهم بس كيف يفتح الباب مش شغله يعرف مين قال له تقول ارجع أغلق الباب نفس الطريقة كل شيء مرتب بدون ما ترجع تغير كل الشيفرة
باختصار هذا النمط ينفعك ترتب أمورك زي اللي يخزن الأوامر ويمشي عليها خطوة بخطوة بلا زحمة ولا فوضى.
https://youtube.com/playlist?list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX&si=yvvsSpdIFa-6lYv0
قناة على يوتيوب لواحد عميق جدا في System design وكثير من المواضيع منها data structure و design patterns والى آخر...
قناة على يوتيوب لواحد عميق جدا في System design وكثير من المواضيع منها data structure و design patterns والى آخر...
YouTube
System Design Playlist
This series touches key areas in system design, which are used to design real world systems and interview questions. 1) Load balancing 2) Message Passing 3) ...
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
نصيحه حلوه لتجنب مشاكل
git merge conflicts
بتحصلها اذا انت تشتغل العمل في تيم... اذا لحالك غالباً ما بتحصلها 👍
git merge conflicts
بتحصلها اذا انت تشتغل العمل في تيم... اذا لحالك غالباً ما بتحصلها 👍
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
لمن فاته التسجيل ولمن لم يتم قبوله لحضور مؤتمر المطورين لهذا العام، ما يزال بالإمكان:
١- حضور المعرض المهني المرافق للمؤتمر، الحضور مفتوح ومتاح بدون تسجيل للجميع من الساعة 10 صباحاً حتى 5 عصراً ..
٢- حضور الجلسة النقاشية في قاعة المؤتمر حيث ستكون مفتوحة ومتاحة بدون تسجيل (المقاعد محدودة بحسب من يحضر أولاً) من الساعة 3 عصراً حتى 5 مساءً بإذن الله.
📅 التاريخ: 21 ديسمبر 2024
📍 المكان: صنعاء، قاعة مؤسسة اليتيم التنموية.
https://maps.app.goo.gl/6oA3hhyUXH9puxZo9
#DevFestSanaa
#DevFestSanaa24
#GDGSanaa
#gdg_yemen
#GDG_Sanaa
١- حضور المعرض المهني المرافق للمؤتمر، الحضور مفتوح ومتاح بدون تسجيل للجميع من الساعة 10 صباحاً حتى 5 عصراً ..
٢- حضور الجلسة النقاشية في قاعة المؤتمر حيث ستكون مفتوحة ومتاحة بدون تسجيل (المقاعد محدودة بحسب من يحضر أولاً) من الساعة 3 عصراً حتى 5 مساءً بإذن الله.
📅 التاريخ: 21 ديسمبر 2024
📍 المكان: صنعاء، قاعة مؤسسة اليتيم التنموية.
https://maps.app.goo.gl/6oA3hhyUXH9puxZo9
#DevFestSanaa
#DevFestSanaa24
#GDGSanaa
#gdg_yemen
#GDG_Sanaa
عندك ٣ أنظمة عندهم بيانات مكملة لبعضها والبيانات هذه مش بيتم تحديثها في نفس الوقت يعني ممكن البيانات في نظام ١ تحدث النهارده والبيانات في نظام ٢ تحدث بكرة والبيانات في نظام ٣ تحدث السنة القادمة وفيه نظام رابع بيحتاج البيانات هذه كلها أو بعبارة أخرى بيحتاج يكون على اطلاع بتحديثات البيانات هذه فالسؤال حاليا كيف النظام الرابع هذا بيجمع البيانات ويتابع التحديثات باستمرار طبعا سيكون فيه تكامل integration بين ال٤ أنظمة ولازم يتم تجميع البيانات هذه في مكان ما فما هو هذا المكان ماعندك كذا حل ١ أفضل حل من وجهة نظري التي لا يعتد بها في أي محفل دولي إن النظام الرابع هو اللي يجمعها عنده بحيث أي بيانات تتحدث في الأنظمة ال٣ الثانيه يرسلو للنظام الرابع التحديثات والسبب إنه هو اللي مهتم وهو اللي يشتي البيانات فهو اللي يتحمل التكلفة وخلونا نؤجل الكلام على كيف يرسلو على شأن فيه تفاصيل كتيرة ٢ طيب ممكن الحل هذا يكون صعب على النظام الرابع على سبيل المثال ممكن تكون طريقة التكامل مختلفة مع كل نظام واحد شغالsync وواحد شغال async واحد شغال rest وواحد شغال soap أو هذا نظام جاهز وعمل الكلام هذا فيه محتاج تكلم الvendor وتبيع أي شيء 😅 على شأن ينفذهولك ففي الحالة هذه ممكن يتم تجميع البيانات في حاجة وسيطة والنظام الرابع ياخد البيانات من الحاجة الوسيطة هذه سواء ياخذها يحطها عنده أو يطؤحها في مكانها ويرجع لها عند الحاجة ٣ الحل السابق بيكون عملي لو عندك حاجة جاهزة تقدر تستخدمها لتجميع البيانات هذه مثل الESB وهذه شائع في المؤسسات التقليدية الكبيرة مثل البنوك بس هذه مش دايما متاح في كل المؤسسات ومش متاح في المؤسسات الكبيرة اللي متبنية فكرة NoESB Architectures ففي الحالة هذه محتاج تعمل حاجة بلدي تلم البيانات هذه ٤ طيب لو الحل البلدي ما نفعش لأي سبب غالبا بتكون متعلقة بالنفوذ في المؤسسة أو ضيق الوقت فالحل الرابع إن أحد الأنظمة الثلاثة هو اللي يجمع البيانات وغالبا بيكون النظام اللي عنده أكبر قدر من البيانات هذه وهذا أسوأ حل فيهم لأن النظام هذا محتاج يحتفظ ببيانات لن يعمل بها حاجة غير إنه سيكون كوبري مابش فيه U-turns واحنا هنا بنتكلم عن الsoftware architecture مش السياسة على شأن ما تفهموناش غلط وستلاقي الarchitecture تبعه اتعقد وقاعدة البيانات كبرت بدون داعي والtroubleshooting بقى صعب جدا المقصود يعني ما تذهب للحل الرابع هذا إلا مضطر
وشكرااا
وشكرااا
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
ال abstract في ال OOP هو فعلا مجرد كيف يعني مجرد مثلا لو سألتك الى من أنت تنتمي مثلا ستجاوبني انتمي إلى البشر طيب لو قلت لك مثلا اسم طالب مفهوم عام يعبر عن مجموعة بصنف محدد من هم الطلاب هم محمد علي صالح و خالد بن فلان مثال اخر عندما اقلك product اسم مجرد مثل ايش منتج زيت مثلا الي طلع في راسي 😅 طيب ايش خلاصة الكلام هذا متى استخدمه وما الفرق بينه وبين interface شف عزيزي الطالب ادي لك مثال قد اجيب لك الفرق بينهم متى تقرر تستخدمهم طيب لو معك مثلا موقع تعليمي بيتم فيه عرض كورسات مثلا أسم الكورسات هنا هو abstract عندك موقع يعرض كورسات الكورس فكرة مجردة (abstract) ما تقدر تعرضها مباشرة
عندك أنواع: كورسات فيديو وكورسات نصوص نسوي كلاس abstract للكورسات فيه الخصائص المشتركة زي: اسم الكورس ومدة الكورس.
وبعدين الكلاسات الثانية (فيديو ونصوص) تورث منه وتضيف التفاصيل.
طيب لو عندك أستاذ عنده مجموعة كورسات؟
نخلي كلاس يجمع الكورسات الفردية، ونتعامل معه وكأنه كورس واحد.
ها طيب ايش رائيك تستخدم ال interface لا ستوقف هنا في مثل هذا القرارات الانترفيس مستحيل تتعامل مباشرة مع أي كلاس بيعملها implementation وحط في عقلك انها عبارة عن عقد فعلا عملية تغليف وعمل loosely coupling تفصل الاعتماديه وخل بالك انها سهلة عملية الاختبارات ليس فقط في ال unit testing بل الفائدة الكبيرة منها في عمليات integration testing بين مكونات النظام نفسه
بهذا الموضوع ان لخصت لك موضوع ال Composite Design Pattern
وشكرا
عندك أنواع: كورسات فيديو وكورسات نصوص نسوي كلاس abstract للكورسات فيه الخصائص المشتركة زي: اسم الكورس ومدة الكورس.
وبعدين الكلاسات الثانية (فيديو ونصوص) تورث منه وتضيف التفاصيل.
طيب لو عندك أستاذ عنده مجموعة كورسات؟
نخلي كلاس يجمع الكورسات الفردية، ونتعامل معه وكأنه كورس واحد.
ها طيب ايش رائيك تستخدم ال interface لا ستوقف هنا في مثل هذا القرارات الانترفيس مستحيل تتعامل مباشرة مع أي كلاس بيعملها implementation وحط في عقلك انها عبارة عن عقد فعلا عملية تغليف وعمل loosely coupling تفصل الاعتماديه وخل بالك انها سهلة عملية الاختبارات ليس فقط في ال unit testing بل الفائدة الكبيرة منها في عمليات integration testing بين مكونات النظام نفسه
بهذا الموضوع ان لخصت لك موضوع ال Composite Design Pattern
وشكرا
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
InfoTechnology (IT4_2024)
ال abstract في ال OOP هو فعلا مجرد كيف يعني مجرد مثلا لو سألتك الى من أنت تنتمي مثلا ستجاوبني انتمي إلى البشر طيب لو قلت لك مثلا اسم طالب مفهوم عام يعبر عن مجموعة بصنف محدد من هم الطلاب هم محمد علي صالح و خالد بن فلان مثال اخر عندما اقلك product اسم…
تابع
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
ازيدك من الشعر بيت