تنفيذ بنية نظيفة باستخدام Nest.JS PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

تنفيذ هندسة معمارية نظيفة باستخدام Nest.JS

هذه المقالة مخصصة للمتحمسين الذين يسعون جاهدين لكتابة كود نظيف وقابل للتطوير والأهم من ذلك أنه قابل لإعادة البناء. سيعطي فكرة عن كيفية قيام Nest.JS بمساعدتنا في كتابة تعليمات برمجية نظيفة وما هي البنية الأساسية التي تستخدمها.

يتطلب تطبيق بنية نظيفة باستخدام Nest.JS أن نفهم أولاً ماهية هذا الإطار وكيف يعمل.

Nest أو Nest.JS هو إطار عمل لبناء تطبيقات Node.js فعالة وقابلة للتطوير (من جانب الخادم) مبنية باستخدام TypeScript. يستخدم Express أو Fastify ويسمح بمستوى من التجريد لتمكين المطورين من استخدام كمية كبيرة من الوحدات (طرف ثالث) داخل التعليمات البرمجية الخاصة بهم.

دعونا نتعمق أكثر في ماهية هذه العمارة النظيفة. 

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

1. نموذج: سيحتوي على ملف الكائن الذي يخطط مع العلاقة / المستندات في قاعدة البيانات.

2. المراقب المالي: إنه معالج الطلب وهو مسؤول عن تنفيذ منطق الأعمال وجميع عمليات التلاعب بالبيانات.

3. عرض: سيحتوي هذا الجزء على ملفات معنية بعرض البيانات ، إما ملفات HTML أو بعض ملفات محرك القوالب.

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

لازلت مشوش؟ اسمحوا لي أن أشرح بالتفصيل.

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

دعنا نحاول فهم هذا بالرسم البياني أدناه.

المصدر مخروط معماري نظيف 

يمكنك أن ترى أننا قسمنا هندستنا إلى 4 طبقات:

1. الكيانات: في جوهرها ، الكيانات هي النماذج (قواعد المؤسسة) التي تحدد قواعد مؤسستك وتخبر ما هو التطبيق. لن تتغير هذه الطبقة بمرور الوقت وعادة ما تكون مجردة ولا يمكن الوصول إليها مباشرة. على سبيل المثال ، كل تطبيق له "مستخدم". كل الحقول التي يجب على المستخدم تخزينها وأنواعها وعلاقاتها مع الكيانات الأخرى ستشكل كيانًا.

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

3. وحدات التحكم / البوابات: هذه هي القنوات التي تساعدنا في تنفيذ حالات الاستخدام باستخدام الأدوات والمكتبات الخارجية باستخدام حقن التبعية.

4. الأدوات الخارجية: جميع الأدوات والمكتبات التي نستخدمها لبناء منطقنا ستندرج تحت هذه الطبقة على سبيل المثال. ORM ، Emailer ، Encryption ، إلخ.

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

حسنًا ، الآن ، لقد فهمت جوهر Nest.JS وفهمت كيف تعمل الهندسة المعمارية النظيفة. الآن السؤال الذي يطرح نفسه ، كيف يرتبط هذين؟  

دعنا نحاول أن نفهم ما هي اللبنات الأساسية الثلاثة لـ Nest.JS وما يفعله كل منها.

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

كي تختصر،

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

الخلاصة:

Nest.JS هو إطار عمل Node.JS قوي وأكبر نص مكتوب متاح اليوم. الآن بعد أن حصلت على المعلومات الداخلية حول هذا الإطار ، يجب أن تتساءل عما إذا كان بإمكاننا استخدامه لبناء هيكل مشروع بهندسة معمارية نظيفة. حسنا، الإجابة هي نعم! قطعاً. كيف؟ سأشرح في السلسلة التالية من هذه المقالة. 

حتى ذلك الحين ، ترقبوا!

نبذة عن الكاتب:

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

اقرأ أحدث مدونة لدينا: إطار عمل Golang-Beego وتطبيقاته

المعرفة تستحق تسليمها في بريدك الوارد

الطابع الزمني:

اكثر من مختبرات مانترا