6. Spring لتكوين التطبيقات ثلاثية الطبقات
هنا، سنستخدم مثالاً لاستكشاف كيفية استخدام Spring لتكوين تطبيقات ثلاثية الطبقات. ومن الأمثلة الشائعة على هذا النوع من التطبيقات تطبيقات الويب.
6.1. المشكلة
نريد إنشاء تطبيق ثلاثي المستويات بالهيكل التالي:
![]() |
- ستصبح الطبقات الثلاث مستقلة عن بعضها البعض من خلال استخدام الواجهات
- سيتم التعامل مع تكامل الطبقات الثلاث بواسطة Spring
- سننشئ حزمًا منفصلة لكل طبقة من الطبقات الثلاث، والتي سنسميها [control] و[domain] و[dao]. وستحتوي حزمة [tests] إضافية على تطبيقات الاختبار.
6.2. طبقة الوصول إلى البيانات
ستقوم طبقة DAO بتنفيذ الواجهة التالية:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' do something in the diaper [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- اكتب فئتين، Dao1Impl1 و Dao1Impl2، اللتين تنفذان واجهة IDao. ستُرجع الطريقة Dao1Impl1.doSomethingInDaoLayer القيمة a+b، وستُرجع الطريقة Dao1Impl2.doSomethingInDaoLayer القيمة a-b.
- اكتب فئة اختبار NUnit لاختبار الفئتين السابقتين
6.3. طبقة الأعمال
ستقوم طبقة الأعمال بتنفيذ الواجهة التالية:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' do something in the [domain] layer
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- اكتب فئتين، Domain1Impl1 و Domain1Impl2، اللتين تنفذان واجهة IDomain. ستحتوي هاتان الفئتان على حقل خاص من النوع IDao يمكن تهيئته عبر خاصية عامة. ستقوم طريقة doSomethingInDomainLayer للفئة [DomainImpl1] بزيادة a و b بمقدار واحد، ثم تمرير هذين المعلمتين إلى طريقة doSomethingInDaoLayer للكائن IDao1 المستلم. ستقوم طريقة doSomethingInDomainLayer للفئة [Domain1Impl2] بتقليل a و b بمقدار واحد قبل القيام بنفس الشيء.
- اكتب فئة اختبار NUnit لاختبار الفئتين السابقتين
6.4. طبقة واجهة المستخدم
ستقوم طبقة واجهة المستخدم بتنفيذ الواجهة التالية:
Namespace istia.st.spring3tier.control
Public Interface IControl
' do something in the [control] layer
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- اكتب فئتين، Control1Impl1 و Control1Impl2، اللتين تنفذان واجهة IControl1. ستحتوي هاتان الفئتان على حقل خاص من النوع IDomain يمكن تهيئته عبر خاصية عامة. ستقوم طريقة doSomethingInControlLayer للفئة [Control1Impl1] بزيادة a و b بمقدار واحد، ثم تمرير هذين المعلمتين إلى طريقة doSomethingInDomainLayer للكائن IDomain1 المستلم. من ناحية أخرى، ستقوم طريقة doSomethingInControlLayer للفئة [Control1Impl2] بتقليل a و b بمقدار واحد قبل القيام بنفس الشيء.
- اكتب فئة اختبار NUnit لاختبار الفئتين السابقتين
6.5. التكامل مع Spring
- اكتب ملف تكوين Spring يحدد الفئات التي يجب أن تستخدمها كل طبقة من الطبقات الثلاث السابقة
- اكتب فئة اختبار NUnit باستخدام تكوينات Spring مختلفة لإبراز مرونة التطبيق
- اكتب تطبيقًا مستقلًا (طريقة main) يمرر معلمتين إلى طريقة [doSomethingInControlLayer] الخاصة بواجهة IControl المنفذة ويعرض النتيجة التي ترجعها الواجهة.
