لقد ناقشت اليوم مع زملائي ما إذا كنت تريد استخدام مزيج من التكوين و Bean لإنشاء فول أو استخدام Service مباشرة وغيرها من التعليقات التوضيحية لوضعه على الفصل. يميل المؤلف إلى استخدام النوع الأول ، أي مزيج من التكوين و Bean.
دعونا أولاً نلقي نظرة على مثال ، والهدف هو إنشاء حبة من SearchService.
استخدم مباشرة service:
// SearchService.javapackage li.koly.search ؛ استيراد java.util.list ؛ الواجهة العامة SearchService {list <bount> search (string q) ؛} // elasticsearchserviceimpl.javapackage li.koly.search java.util.list ؛ serviceComponentPublicpublic Class ElasticSearchServiceImpl تنفذ SearchService {Override Public List <Object> Search (string q) {return arrays.aslist ("Hello" ، Q) ؛ }} // application.javapackage li.koly.search ؛ import org.springframework.beans.factory.Antation.autowired ؛ import org.springframework.boot.springApplication ؛ import org.springframework.boot.autoconfigure. org.springframework.web.bind.annotation.getMapping ؛ استيراد org.springframework.web.bind.annotation.restController ؛ import java.util.list ؛@springbootapplication@restControllerPublic {autowired searchervice searchervice ؛ getMapping ("/search") قائمة عامة <Object> Hello (String Q) {return searchService.search (q) ؛ } public static void main (string [] args) {springapplication.run (application.class ، args) ؛ }}ابدأ التطبيق ، وصول المتصفح: http: // localhost: 8081/search؟ q = koly ، عرض الصفحة: ["Hello" ، "Koly"]
كيفية استخدام configuration و bean:
// elasticsearchServiceImpl.javapackage li.koly.search ؛ استيراد java.util.arrays ؛ استيراد java.util.list ؛ الطبقة العامة elasticsearchServiceImpl تنفذ SearchService {Override Public List <Object> Search (String Q) }} // appconfig.javapackage li.koly.search ؛ استيراد org.springframework.context.annotation.bean ؛ استيراد org.springframework.context.annotation.configuration ؛ configurationpublic appconfig }}بالمقارنة مع الرمز الذي يستخدم مباشرة ، هناك فئة AppConfig ، ويتم إزالة التعليق التوضيحي service على ElasticsearchServiceImpl. للوهلة الأولى ، هناك المزيد من الرموز والفصول. إذن ما هي فوائد استخدام الأخير؟
المؤلف يعتقد أن الفوائد هي:
فصل المخاوف
باستخدام configuration و @bean ، يتم وضع الفاصوليا في مكان واحد ، والواجهة وتنفيذها لا علاقة لها بإنشاء الفاصوليا.
إذا احتاج إنشاء الفول إلى تغيير ، فأنت بحاجة فقط إلى عرض فئة التكوين المقابلة وتعديلها ، ولا تحتاج إلى الانتقال إلى Java Bean المقابلة للتغييرات. على سبيل المثال ، يتطلب إنشاء الفول في بعض الأحيان تعاونًا مع scope أو profile ، وتحتاج فقط إلى تعديل فئة التكوين في هذا الوقت.
مسؤولية واحدة
توضيح شرح Service نفسه مسؤوليتين:
واحد هو خلق الفاصوليا.
والثاني هو تحديد الفصل كخدمة.
يشير إلى أن الفئة المشروحة هي "خدمة" ، تم تعريفها في الأصل من قبل المجال
Design (Evans ، 2003) باعتباره "عملية يتم تقديمها كواجهة تقف بمفردها في النموذج ، مع عدم وجود حالة مغلفة."
ما سبق هو شرح الربيع لشرح الخدمات. وهذا يعني أن Service تمثل في الواقع عملية مستقلة ومستقلة مقدمة في DDD.
باستخدام طريقة bean و configuration ، يتم تسليم إنشاء الفول إلى فئة منفصلة ، ويتم تسليم هوية الخدمة إلى الواجهة واسم الفصل في Java. وينعكس هذا أيضًا في بيانات الربيع. على سبيل المثال ، يتم تحديد المستودع بالاسم ، مثل crudrepository. لذلك ، تنعكس الخدمة أيضًا باسمها. يعد تعريف التسلسل الهرمي المحدد ، من خلال الاسم ، دون الاعتماد على التعليقات التوضيحية التي يوفرها الربيع ، مناسبًا لتوفير المزيد من التسلسلات الهرمية وفقًا للمشروع ، مثل طبقة Mapper ، وطبقة التحقق ، إلخ.
بالإضافة إلى ذلك ، الفول والخدمة هما بعانين. أحدهما يدور حول التنفيذ الملموس والآخر يدور حول المفاهيم في DDD.
أكثر مرونة
باستخدام bean ، يمكنك إنشاء مثيلات من الفصول في المكتبة. إذا كنت تستخدم SERVICE ، فلا يمكنك إضافة شرح خدمات الخدمة إلى الفئة المقابلة في المكتبة.
أقل معرفة (مبدأ المعرفة الأدنى)
يعني الحد الأدنى لمبدأ المعرفة:
كلما زادت التكنولوجيا أو المعرفة المطلوبة لإكمال الوظيفة ، كان ذلك أفضل ، وذلك لضمان أن المشروع بسيط ويقلل من صعوبة تعلم المشروع.
نظرًا لأن استخدام Service لا يمكن إنشاء مثيل للفصل في مكتبة الفصل ، عند مواجهة متطلبات مماثلة ، يجب عليك استخدام شكل configuration و @bean. في هذا الوقت ، توجد التعليقات التوضيحية مثل Service و Configuration و bean في المشروع بأكمله في نفس الوقت ، والأشياء التي تفعله هذه التعليقات التوضيحية هي نفسها ، أي إنشاء الفول.
مع Service ، من المحتمل جدًا أن توجد Service و Component و Configuration و Bean في وقت واحد.
عند استخدام @configuration و @bean ، يمكنك تجاهل خدمة service و @component تمامًا ، والتي تتوافق مع مبدأ الحد الأدنى من المعرفة.
أخيرًا ، بالمناسبة ، تم إنشاء Bean's Bean في XML من قبل ، وتم استخدام Java للتكوين لاحقًا. السبب الرئيسي لعدم استخدام XML هو أن XML ليس موجزًا بما فيه الكفاية وليس لديه أي وظائف مثل فحص وقت الترجمة ، بدلاً من انتزاع إنشاء الفاصوليا إلى فئات مختلفة.
باختصار ، يفضل المؤلف استخدام configuration و bean.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.