كتاب "الربيع. جميع أنماط التصميم »

الصورة مرحبا ، habrozhiteli! لقد نشرنا كتابًا يقدم نظرة عامة على إطار ربيع 5 وأنماط التصميم له. يتم شرح مبدأ حقن التبعية ، والذي يلعب دورًا رئيسيًا في إنشاء كود مترابط فضفاضة في إطار Spring. ثم ، يتم فحص أنماط عصابة الأربعة الكلاسيكية عند تصميم التطبيقات في Spring. في الأجزاء التالية من الكتاب ، ينظر المؤلف في أنماط Aspect Oriented Programming (AOP) ، وهي أنماط JDBC التي تتيح لك الوصول إلى قاعدة البيانات المجردة. في الفصول الأخيرة من الكتاب ، يستكشف المؤلف كيفية العمل مع MVC ، وأنماط التصميم التفاعلي ، وأنماط التصميم المستخدمة في الربيع والبرمجة المتزامنة.

نقترح أن تتعرف على المقطع "نقش" كائن الوصول إلى البيانات ""

كائن الوصول إلى البيانات (DAO) هو نمط تصميم شائع للغاية لمستوى الثبات في تطبيقات J2EE. يفصل مستوى منطق العمل عن مستوى الاستبقاء. يعتمد نمط DAO على مبادئ الكائنة الموجهة للتغليف والتجريد. إن سياق استخدام نمط DAO هو الوصول إلى البيانات وتخزينها اعتمادًا على التنفيذ ونوع التخزين المعينين ، على سبيل المثال ، قاعدة بيانات موجهة للكائنات ، ملفات غير مهيكلة ، قواعد بيانات علائقية ، إلخ. بناءً على نمط DAO ، يمكنك إنشاء واجهة DAO وتنفيذها ، لملخص وتغليف جميع المكالمات إلى مصدر البيانات. تطبيق DAO مماثل يدير موارد قاعدة البيانات مثل الاتصالات بمصدر بيانات.

تتكيف واجهات DAO بسهولة شديدة مع جميع الآليات الأساسية لمصادر البيانات ؛ ولا تحتاج إلى استبدالها بالتغييرات في تقنيات التخزين بمستويات أقل. يتيح لك هذا النمط تطبيق تقنيات الوصول إلى البيانات المختلفة دون التأثير على منطق العمل في تطبيق الشركة. دعنا نفكر في التين. 8.1 لفهم مبادئ نمط DAO بشكل أفضل.

كما ترون في الرسم التخطيطي ، الكائنات التالية متورطة في النموذج.

BusinessObject - كائن يعمل على مستوى الأعمال - عميل لمستوى الوصول إلى البيانات. إنه يحتاج إلى بيانات لنمذجة العمليات التجارية ، فضلاً عن إعداد كائنات Java للوظائف الإضافية أو وحدات التحكم في التطبيق.

DataAccessObject هو الكائن الرئيسي لنموذج DAO. يخفي من BusinessObject كامل التنفيذ على مستوى منخفض من قاعدة البيانات الأساسية.

مصدر البيانات هو أيضًا كائن يحتوي على كافة المعلومات ذات المستوى المنخفض حول ماهية قاعدة البيانات الأساسية بالضبط: RDBMS ، أو ملفات غير منظمة ، أو XML.

TransferObject - كائن يستخدم كوسيط تخزين. يستخدمه DataAccessObject لإرجاع البيانات إلى BusinessObject.

الصورة

خذ بعين الاعتبار المثال التالي لنمط DAO الذي AccountDao هو واجهة DataAccessObject و AccountDaoImpl هي فئة تطبق واجهة AccountDao:

public interface AccountDao { Integer totalAccountsByBranch(String branchName); } public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { @Override public Integer totalAccountsByBranch(String branchName) { String sql = "SELECT count(*) FROM Account WHERE branchName = "+branchName; return this.getJdbcTemplate().queryForObject(sql, Integer.class); } } 

إنشاء كائنات DAO في الربيع باستخدام نمط تصميم المصنع


كما تعلم ، فإن الكثير من أنماط التصميم تشارك في إطار Spring. نمط المصنع هو نمط تصميم عام ويستخدم لإنشاء كائن دون الكشف عن المنطق الأساسي للعميل ، وكذلك تعيين كائن جديد للمتصل باستخدام واجهة مشتركة أو فئة مجردة. بفضل أنماط تصميم أسلوب المصنع والمصنع التجريدي ، يمكن تحقيق مرونة عالية جدًا في نمط DAO.

سنكتشف في مثالنا تنفيذ الإستراتيجية التي ينتج بها المصنع كائنات DAO لتنفيذ قاعدة بيانات مشتركة (الشكل 8.2).

الصورة

يمكنك أن ترى في الرسم البياني السابق أن AccountDaoFactory ينتج كائن AccountDao ، أي أنه مصنع له. يمكن استبدال قاعدة البيانات الأساسية في أي وقت ، في حين لا يلزم تغيير رمز العمل - يتولى المصنع هذا العمل. يدعم Spring تخزين جميع DAOs في مصنع المكونات وكذلك في مصنع DAO.

نمط رسم الخرائط البيانات


يوفر إطار عمل ORM التعيين بين الكائنات وقواعد البيانات العلائقية ، لأن كائنات وجداول قواعد البيانات العلائقية تخزن بيانات التطبيق بطرق مختلفة. بالإضافة إلى ذلك ، تحتوي الكائنات والجداول على آليات مختلفة لتنظيم البيانات. عند استخدام أي حل ORM في تطبيق Spring ، مثل Hibernate أو JPA أو JDO ، فلا داعي للقلق بشأن آلية التعيين بين الكائنات وقواعد البيانات ذات الصلة.

دعنا نفكر في التين. 8.3 لفهم نمط "مخطط البيانات" بشكل أفضل.

الصورة

في الرسم التخطيطي ، يتم تعيين كائن الحساب إلى قاعدة البيانات العلائقية باستخدام واجهة AccountMapper. يلعب AccountMapper دور الوسيط في التطبيق بين كائن Java وقاعدة البيانات الأساسية. النظر في نمط آخر يستخدم على مستوى الوصول إلى البيانات.

نمط "نموذج المجال"


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

الصورة

كما ترون في المخطط ، يحدد التطبيق نموذجين للنطاق وفقًا لمتطلبات العمل. يتم وصف خوارزمية الأعمال لتحويل الأموال من حساب إلى آخر في فئة TransferService. تتعلق فئتا TransferService و AccountService بنمط "نموذج المجال" في تطبيق المؤسسة.

الوكلاء لنمط التحميل المؤجل


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

قالب طريقة نمط لدعم السبات في الربيع


يوفر إطار Spring فئة مساعدة للوصول إلى البيانات على مستوى DAO ، بناءً على نمط تصميم GoF Pattern Method. تدعم فئة HibernateTemplate الخاصة بإطار Spring عمليات قاعدة البيانات مثل حفظ وإنشاء وحذف وتحديث. تضمن هذه الفئة استخدام جلسة إسبات واحدة فقط لكل معاملة.

السبات التكامل مع الربيع


يعد Hibernate إطار عمل مفتوح المصدر لـ ORM لا يوفر فقط عرضًا لعلاقات الكائن البسيطة بين كائنات Java وجداول قاعدة البيانات ، ولكنه يقدم أيضًا العديد من الميزات المتقدمة لتحسين أداء التطبيق ، كما يساعد في تحسين استخدام الموارد ، مثل التخزين المؤقت وتأخير التحميل واسترجاع البيانات على الفور والتخزين المؤقت الموزع.

يوفر Spring الدعم الكامل للتكامل مع إطار عمل Hibernate ، ويحتوي على العديد من المكتبات المدمجة التي تجعل من الممكن استخدام Hibernate إلى 100٪. لإعداد إعدادات السبات في التطبيق ، يمكنك استخدام نمط حقن التبعية وحاوية IoC لإطار Spring.

في القسم التالي ، سنعرف كيفية تكوين السبات بشكل صحيح في حاوية IoC لإطار Spring.

تحديد إعدادات السبات SessionFactory في حاوية Spring


أفضل طريقة لتكوين Hibernate وتقنيات التخزين الأخرى في أي تطبيق من مؤسسات هي فصل كائنات الأعمال مع أدلة الموارد الثابتة ، مثل DataSource في JDBC أو SessionFactory in Hibernate. يمكن وصف هذه الموارد على أنها مكونات في حاوية Spring. لكن الوصول إليهم بواسطة كائنات الأعمال يتطلب إشارات إليها. خذ بعين الاعتبار فئة DAO التالية التي تستخدم كائن SessionFactory لاسترداد البيانات لتطبيق ما:

 public class AccountDaoImpl implements AccountDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // ... } 

كما ترون ، تتبع فئة DAO ، AccountDaoImpl ، نمط حقن التبعية. للوصول إلى البيانات ، يتم تضمين كائن SessionFactory من إطار عمل Hibernate ، ويشعر بأنه رائع في حاوية Spring IoC. كائن SessionFactory من إطار عمل Hibernate هو كائن فردي ؛ فهو ينشئ الكائن الرئيسي لواجهة Hibernate org.hibernate.Session. يدير كائن SessionFactory كائن الجلسة وهو مسؤول أيضًا عن فتحه وإغلاقه. تحتوي واجهة الجلسة على وظيفة الوصول إلى البيانات الحقيقية - حفظ (حفظ) ، تحديث (تحديث) ، حذف (حذف) وتحميل (تحميل) كائنات من قاعدة البيانات. في التطبيق ، يقوم كائن من فئة AccountDaoImpl أو أي مستودع تخزين آخر بتنفيذ جميع عمليات تخزين البيانات الضرورية باستخدام كائن جلسة العمل هذا.

يوفر إطار Spring وحدات Hibernate مدمجة ، بحيث يمكنك استخدام مكونات SessionFactory Hibernate في تطبيقاتك.

المكون org.springframework.orm.hibernate5.LocalSessionFactoryBean هو تطبيق لواجهة Spring FactoryBean. يستند LocalSessionFactoryBean إلى نمط "مصنع المستخلص" ؛ حيث يقوم بإنشاء كائن SessionFactory في التطبيق. يمكن تكوين هذا الكائن كمكون في سياق تطبيق Spring كما يلي:

 @Bean public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean(); sfb.setDataSource(dataSource); sfb.setPackagesToScan(new String[] { "com.packt.patterninspring.chapter8.bankapp.model" }); Properties props = new Properties(); props.setProperty("dialect", "org.hibernate.dialect.H2Dialect"); sfb.setHibernateProperties(props); return sfb; } 

في هذا الرمز ، قمنا بتكوين كائن SessionFactory كمكون باستخدام فئة LocalSessionFactoryBean لإطار Spring. تقبل طريقة هذا المكون كائنًا من نوع DataSource كوسيطة ، والذي يحدد موقع وطريقة الاتصال بقاعدة البيانات. حددنا أيضًا أي حزمة لعرضها عن طريق تعيين القيمة "com.packt.patterninspring.chapter8.bankapp.model" لخاصية setPackagesToScan الخاصة بمكون LocalSessionFactoryBean ، وتعيين خاصية اللهجة لمكون SessionFactory باستخدام طريقة setHibernateProperties للإشارة إلى أي نوع من قاعدة البيانات لدينا مع يهم في التطبيق.

الآن ، بعد إعداد مكون SessionFactory Hibernate ، في سياق تطبيق Spring ، دعونا نرى كيف يمكننا تنفيذ كائنات الوصول إلى البيانات لمستوى حفظ تطبيقنا.

عن المؤلف


دينيش راجبوت هو رئيس تحرير موقع Dineshonjava ، وهي مدونة تقنية مخصصة لتقنيات Java و Spring. يحتوي الموقع على مقالات حول تقنية Java. دينيش هو مدون ، مؤلف كتب ، ومنذ عام 2008 كان من عشاق الربيع ، وهو متخصص معتمد في Pivotal (Pivotal Certified Spring Professional). لديه أكثر من عقد من الخبرة في التصميم والتطوير باستخدام Java و Spring. وهو متخصص في العمل مع أحدث إصدار من Spring Framework و Spring Boot و Spring Security وإنشاء واجهة REST API وهيكلية خدمات ميكروية وبرمجة تفاعلية وبرمجة موجهة نحو الجوانب باستخدام Spring وأنماط التصميم و Struts و Hibernate وخدمات الويب و Spring Batch و Cassandra و MongoDB ، بنية تطبيق الويب.

تعمل دينيش حاليًا كمدير للتكنولوجيا في واحدة من الشركات الرائدة في مجال تطوير البرمجيات. وكان المطور وقائد الفريق في بينيت ، كولمان وشركاه المحدودة ، وقبل ذلك ، مطور رائد في Paytm. دينيش متحمس لأحدث تقنيات جافا ويحب الكتابة عنها في المدونات الفنية. وهو عضو نشط في مجتمعات Java و Spring في مختلف المنتديات. دينيش هو أحد أفضل المتخصصين في Java و Spring.

حول المراجع


يتمتع راجيف كومار موهان بخبرة واسعة في تطوير البرمجيات وتدريب الشركات. لمدة 18 عامًا ، عمل لدى شركات تكنولوجيا المعلومات الكبرى مثل IBM و Pentasoft و Sapient و Deft Infosystems. بدأ حياته المهنية كمبرمج ، قاد العديد من المشاريع.

وهو خبير في مجال Java و J2EE والأطر ذات الصلة ، وتقنيات Android و UI. معتمد من Sun كمبرمج جافا (SCJP ، مبرمج Java معتمد من Sun) ومطور Java Web (مطور Sun Webified Component Developer ، SCWCD). راجيف لديه أربعة تعليم عالي: في مجال علوم الكمبيوتر (علوم الكمبيوتر) ، علوم الكمبيوتر التطبيقية (تطبيقات الحاسوب) ، الكيمياء العضوية وإدارة الأعمال (ماجستير في إدارة الأعمال). وهو مستشار توظيف وخبير تدريب في HCL و Amdocs و Steria و TCS و Wipro وجامعة Oracle و IBM و CSC و Genpact و Sapient Infosys و Capgemini.

راجيف هو مؤسس SNS Infotech ، وهي شركة تقع في مدينة نويدا الكبرى. بالإضافة إلى ذلك ، عمل في المعهد الوطني لتكنولوجيا الأزياء (NIFT).

»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على موقع الناشر
» المحتويات
» مقتطفات

20 ٪ من القسيمة للباعة المتجولين - الربيع

Source: https://habr.com/ru/post/ar438976/


All Articles