الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أقوم بفصل منطق العمل عن استعلامات قواعد البيانات

بدأه Speed_Of_Light في 6 يوليو 2010 · 6 رد · 1,134 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي برنامج أقوم بتصميمه وفق ثلاث طبقات 3Tier Architecture : طبقة العرض، طبقة منطق العمل، طبقة البيانات

ووجدت أنه من السهل فصل طبقة العرض عن باقي الطبقات، لكني أواجه تعقيداً عند محاولة فصل منطق العمل عن طبقة البيانات

حيث ينفذ البرنامج استعلامات معقدة على قاعدة البيانات لاستخراج معلومات تحليلية وإحصائية من بيانات سبق للمستخدم إدخالها، ثم إدخال نتائج هذه التحاليل إلى قاعدة البيانات مرة أخرى (بواسطة Triggers).

لكن هذا يؤدي إلى جعل الاستعلامات تحتوي جزءً كبيراً من منطق العمل ! أليس كذلك ؟!

فهل أقوم بتحليل هذه البيانات داخل الكود وأتخلى عن الاستعلامات المعقدة والـ Triggers وديناميكيتهما ؟ (وأظن أن الأداء سيكون أسوأ في هذه الحالة)، أم أبقى على الوضع الحالي حيث يختلط منطق العمل بطبقة البيانات؟

هل من نصيحة ؟

1
#2

السلام عليكم

اخي speed قد رايك لك مشاركة بالado

ان كنت تستخدم تقنية ما يكروسوفت اتوقع ان تقنية ال linq جميلة جدا وتسهل العمل عليك

اما ان كنت تعمل تحت منصة جافا لا اعرف شيئا عنها بالتوفيق

وجزاكم الله كل خير

In bad state

#3

أنا شخصيا, أرفض الإعتماد على قاعدة البيانات في أي شئ سوى تخزين البيانات, لأنك لو إعتمدت عليها في المنطق (مثل إستخدام procedures و triggers) فهناك نقطتين يجب أن تعيهما:

1- تطبيقا سيكون مرتبط بقاعدة البيانات و سيكون من الصعب تغير برنامج إدارة القاعدة (DBMS) لأخر.

2- إذا كتبت المنطق في كود البرنامج (الجافا مثلا) سيكون من السهل عمل تنقيح (debugging) , أما إذا وضعت المنطق على هيئة triggers و procedures فى قاعدة البيانات, فكيف ستقوم بعمل debugging و خاصة إذا كبر البرنامج و تعقد أكثر؟

بالنسبة للنقطة الأولى قد تستطيع تفاديها بأنك قد لا تضطر لتغير برنامج إدارة قاعدة البيانات,, فكيف تستطيع أن تتفادي النقطة الثانيه؟

أنصحك أن تستخدم إحدى الأطر التكاملية مثل hibernate , Nhibernate , linq, JPA, و قم بإستخدام Spring أو Spring.net في طبقة ال business .. و بذلك سيكون كل المنطق في طبقة ال business و ليس له علاقة بقاعدة البيانات على الإطلاق...

بالنسبة للأداء, فإن الأطر التكاملية مثل hibernate تقوم بعمل caching و خلافه مما يؤدي لتحسن الأداء أفضل من إستخدام جمل sql مباشره ..

4
#4

شكراً لك أخ هويدي، أوافقك الرأي 100%.

لكن سؤالي من وجهة نظر هندسة البرمجيات، إذ أنه يوجد بالفعل الكثير من البرامج التي تستخدم قواعد البيانات من دون OR Mapping أو غيرها ... فكيف قام مصمموها بفصل منطق العمل عن استعلامات قاعدة البيانات ؟

هل هناك "حلول سحرية" لا أعرفها ؟!

#5

إذا أردت عمل ذلك فستكتب كود كثير شبية بكود نواة لعمل ORM :D

يعني مثلا ستجد نفسك تقوم بعمل abstractions كثيره و ستجد نفسك في النهاية على وشك بناء ORM :D

كما أن ال ORM ليست أدوات سحرية, بل هي طريقة فصل ال Business عن ال persistence بشكل مريح. فيمكنت إستخدام JDBC و أيضا تستطيع أن تفصل بين ال Business و ال persistence .

تم تعديل هذه المشاركة بواسطة هويدي في 7 يوليو 2010 في 19:49

#6

شكراً لك !

الآن الفكرة واضحة :D

#7

الموضوع دائماً trade off يا شباب

وكما أن الكتابة على قاعدة البيانات لها عيوبها

فهي أيضاً لها فوائدها

وأنا هنا أتكلم عن Locality

وتظهر فائدة هذه العملية بوضوح لو كانت قاعدة البيانات على خادم و البرنامج الخاص بك (أو الموقع ) على خادم آخر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…