في مجتمع Java ، كانت هناك اندفاع في حاويات خفيفة الوزن تساعد على تجميع المكونات من مشاريع مختلفة في تطبيق متماسك. تشكل هذه الحاويات نمطًا شائعًا لكيفية إجراء الأسلاك ، وهو مفهوم يشيرون إليه تحت الاسم العام جدًا "انعكاس التحكم". في هذه المقالة ، أقوم بالبحث في كيفية عمل هذا النمط ، تحت الاسم الأكثر تحديدًا "حقن التبعية" ، وقم بمقارنته مع بديل "محدد موقع الخدمة". الاختيار بينهما أقل أهمية من مبدأ فصل التكوين عن الاستخدام.
أحد الأشياء المسلية حول مشروع Java world هو الكم الهائل من النشاط في بناء بدائل لتقنيات J2EE السائدة ، والكثير منها يحدث في المصادر المفتوحة. الكثير من هذا هو رد فعل على تعقيد الوزن الثقيل في عالم J2EE السائد ، ولكن الكثير منه يستكشف أيضًا البدائل ويطرح أفكارًا إبداعية. هناك مشكلة شائعة يجب معالجتها وهي كيفية دمج عناصر مختلفة معًا: كيف تتوافق مع بنية وحدة التحكم في الويب هذه مع دعم واجهة قاعدة البيانات هذه عندما تم إنشاؤها من قبل فرق مختلفة مع القليل من المعرفة ببعضها البعض. اتخذ عدد من الأطر طعنة في هذه المشكلة ، والعديد منها يتفرع لتوفير قدرة عامة على تجميع المكونات من طبقات مختلفة. وغالبًا ما يشار إلى هذه الحاويات بأنها خفيفة الوزن ، وتشمل الأمثلة PicoContainer و Spring.
يوجد أسفل هذه الحاويات عدد من مبادئ التصميم المثيرة للاهتمام ، والأشياء التي تتجاوز كل هذه الحاويات المحددة وبالفعل منصة Java. هنا أريد أن أبدأ في استكشاف بعض هذه المبادئ. الأمثلة التي أستخدمها موجودة في Java ، ولكن مثل معظم كتاباتي ، تنطبق المبادئ بالتساوي على بيئات OO الأخرى ، وخاصة NET.
خبير سيو
خبير سيو
المكونات والخدمات
يسحبني موضوع عناصر الأسلاك معًا تقريبًا إلى مشكلات المصطلحات المعقدة التي تحيط بمصطلحي الخدمة والمكون. تجد مقالات طويلة ومتناقضة حول تعريف هذه الأشياء بكل سهولة. لأغراض بلدي هنا هي استخداماتي الحالية لهذه الشروط المثقلة.
أستخدم مكونًا يعني وجود مجموعة من البرامج المخصصة للاستخدام ، دون تغيير ، من خلال تطبيق خارج عن سيطرة كتّاب المكون. يعني "بدون تغيير" أن التطبيق الذي يستخدم لا يغير الكود المصدري للمكونات ، على الرغم من أنه قد يغير سلوك المكون عن طريق توسيعه بطرق يسمح بها كتّاب المكون.
تشبه الخدمة مكوّنًا في استخدامه من قبل التطبيقات الأجنبية. الفرق الرئيسي هو أنني أتوقع أن يتم استخدام مكون محليًا (فكر في ملف jar أو التجميع أو dll أو الاستيراد المصدر). سيتم استخدام الخدمة عن بُعد من خلال بعض الواجهات البعيدة ، إما متزامن أو غير متزامن (مثل خدمة الويب أو نظام الرسائل أو RPC أو المقبس.)
أنا في الغالب أستخدم الخدمة في هذه المقالة ، ولكن يمكن تطبيق الكثير من نفس المنطق على المكونات المحلية أيضًا. في الواقع ، غالبًا ما تحتاج إلى إطار عمل مكون محلي للوصول بسهولة إلى خدمة بعيدة. لكن الكتابة "مكون أو خدمة" متعبة في القراءة والكتابة ، والخدمات أكثر عصرية في الوقت الحالي.
مثال ساذج
للمساعدة في جعل كل هذا أكثر واقعية ، سأستخدم مثالًا جارًا للحديث عن كل هذا. مثل كل الأمثلة التي أجريتها ، إنه أحد الأمثلة البسيطة للغاية ؛ صغيرة بما يكفي لتكون غير واقعي ، ولكن نأمل بما يكفي بالنسبة لك لتصور ما يحدث دون الوقوع في مستنقع مثال حقيقي.
في هذا المثال ، أكتب مكونًا يوفر قائمة بالأفلام من إخراج مخرج معين. يتم تنفيذ هذه الوظيفة المفيدة بشكل مذهل بواسطة طريقة واحدة.
ليست هناك تعليقات:
إرسال تعليق