ملاحظة: المقالة التي كتبها KJ Daniel بالأمس عندما كنت أتحدث مع صديق، ذكرت استعلام الأمر الخاص بـ ADO، ويبدو أن ذاكرتي سيئة حقًا. يرجى قراءتها. بشكل عام، من المحتمل أن يستخدم الأصدقاء الذين يكتبون كود ASP PHP التشغيل المباشر لـ SQL~
انظر إلى الكود التالي
<%
خافت كون، روبية
مجموعة conn=CreateObject(Adodb.Connection)
كون.فتح....
set rs=conn.execute(select * from news);
...
ترافيرس رس ....
%>
من المؤكد أن سرعة التنفيذ سريعة، لكن بالطبع لا يهم بيان ونصف في المنطق الهيكلي! تنشأ المشاكل عندما يكون هناك الكثير من العبارات!
لم تتم تصفية المعلمات، وهناك حقن SQL، وما إلى ذلك. حسنًا، فلنغير نموذج التصميم الآن!
اعتماد هيكل من 3 طبقات + ORM
ORM: رسم خرائط العلاقة بين الكائنات
إذن ما هي تقنية ORM؟ الأصدقاء الذين هم على دراية بتطوير JAVA .NET يجب أن يعرفوا جيدًا... أن هذا هو رسم الخرائط الارتباطية للكائنات
قم بتعيين الجداول إلى حقول الفئة، وقم بتعيينها إلى الخصائص، وقم بتعيين السجلات إلى الكائنات... يوجد الآن العديد من أطر عمل طبقة الثبات JAVA ORM
على سبيل المثال، السبات ibatis EntityBean (أحد EJB)
ماذا عن أسب؟ يمكننا أيضًا تحقيق ذلك
هيكل ثلاثي الطبقات: طبقة عرض الويب، الطبقة الوسطى، طبقة الثبات
هنا جدول أخبار بسيط
إنشاء جدول الأخبار(
معرف كثافة العمليات,
فارتشار العنوان (200)،
الاتصال فارشار (50000)
)
نحن نرسمها كفصل دراسي
<%
أخبار الطبقة
الهوية الخاصة، العنوان، جهة الاتصال
معرف المجموعة الفرعية (الجانب)
معرف = سينت (سيد)
نهاية الفرعية
وظيفة getID
getID=id
وظيفة النهاية
عنوان المجموعة الفرعية (العنوان)
title=mid(stitle,1,200)'يحدد الطول
نهاية الفرعية
....
نهاية الفصل
%>
ثم نقوم بتصميم الكود الخاص بكيفية تشغيل قاعدة البيانات وتحويلها إلى كائنات.
<%
فئة NewsDataAccessObject
خافت كون، رس، كمد
'الاستعلام عن قطعة من الأخبار
الدالة getNewsByID(id)
set conn=Application(connection)' احصل على اتصال في تجمع الاتصال
set cmd=GetCmd() 'تنفيذ وظيفة GETCMD يُرجع createobject(Adodb.Command)
SelectString=select * from NEWS حيث id = @id
cmd.ActiveConnection = conn
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = SelectString
'أضف معلمات إلى @id الآن، ثابت adInteger = 3 adParamInput=1
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput, , id)
'قم بتشغيل عبارة SQL وأرجع مجموعة النتائج
تعيين rs=cmd.execute()
خافت من جديد
تعيين جديد=أخبار جديدة
إذا rs.eof بعد ذلك
آخر
anew.setID(rs(id)&)
anew.setTitle(rs(title)&)
anew.setContect(rs(Contect)&)
نهاية إذا
rs. Close
تعيين RS=لا شيء
تعيين كمد = لا شيء
تعيين كون = لا شيء
تعيين getNewsByID=anew
وظيفة النهاية
'أدخل مقالة إخبارية
وظيفة إضافة الأخبار (جديد)
خافت كون، كمد
إذا كان فارغًا (جديدًا) ثم addNews=false
set conn=Application(connection)' احصل على اتصال في تجمع الاتصال
set cmd=GetCmd() 'تنفيذ وظيفة GETCMD يُرجع createobject(Adodb.Command)
InsertString=insert into NEWS(id,title,contect) القيم ( @id , @title , @contect )
cmd.ActiveConnection = conn
cmd.CommandType = adCmdText ' Const adCmdText=1
cmd.CommandText = InsertString
'أضف معلمات إلى @id @title @contect الآن، ثابت adInteger = 3 adParamInput=1 adVarWChar = 202
cmd.Parameters.Append cmd.CreateParameter(@id, adInteger, adParamInput, , anew.getID() )
cmd.Parameters.Append cmd.CreateParameter(@title,adVarWChar, adParamInput, 200, anew.getTitle() )
cmd.Parameters.Append cmd.CreateParameter(@contect,adVarWChar, adParamInput, 50000, anew.getConect() )
'تشغيل عبارة SQL
كمد.تنفيذ ()
تعيين كمد = لا شيء
تعيين كون = لا شيء
addNews=صحيح
وظيفة النهاية
وظيفة findByTitle(العنوان)
....
وظيفة النهاية
وظيفة getPageNews (الصفحة، الحجم)
....
وظيفة النهاية
نهاية الفصل
%>
ما ورد أعلاه هو تشغيل قاعدة البيانات ثم تغليف النتائج في الكائن أو كتابة الكائن في قاعدة البيانات.
على الرغم من أن سرعة هذا التنفيذ ستكون أبطأ قليلاً، إلا أن البنية المنطقية العامة واضحة جدًا، وليست هناك حاجة إلى الاهتمام بما إذا كانت المتغيرات قد تمت تصفيتها أو تمت تصفيتها بشكل متعدد.
يركز المصممون في طبقة صفحة الويب بشكل أكبر على الواجهة.
أضف رمز الأخبار لتقديمه أدناه
<%
معرف خافت، عنوان، اتصال، من جديد، داو
معرف = طلب (معرف)
العنوان=طلب.نموذج(عنوان)
contact=Request.Form(contect)
تعيين جديد=أخبار جديدة
anew.setID(المعرف)
anew.setTitle(العنوان)
anew.setContect(الاتصال)
set dao=new NewsDataAccessObject
إذا dao.addNews(جديد) ثم
"الإجابة. الكتابة."
صدى النجاح
آخر
خطأ الصدى
نهاية إذا
%>
اطلع على الأخبار واعرضها
<%
معرف خافت، داو، من جديد
معرف = طلب (معرف)
set dao=new NewsDataAccessObject
تعيين جديد=dao.getNewsByID(id)
إذا anew.getID()<> إذن
%>
العنوان:<%=anew.getTitle()%>
المحتوى:<%=anew.getContect()%>
.....
إذا كان هناك أي أخطاء أو سهو في مقتطف الشفرة أعلاه، شكرًا لك على نصيحتك ~~~
باستخدام طريقة التصميم هذه، ليست هناك حاجة لاستخدام نظام مقال مثل XXXBLOG XXXBBS XXX
نسيت الاستبدال (SQL،'،'') وحدث الحقن!
فيما يتعلق بنظافة الصفحة، لن تكون هناك عبارات SQL، حيث يكون الفنانون مثل الاتصال مسؤولين عن عملهم ثم يضعون خصائص الكائن في الموضع المقابل.
وقد يفكر بعض الأصدقاء في مصادقة المستخدم! سيكون من الأسهل وضع كائن المستخدم الخاص بجدول المستخدم في الجلسة.
<%
إذا كانت فارغة (جلسة (مستخدم)) أو جلسة (مستخدم) = إذن
"اقفز."
آخر
تعيين مستخدم = جلسة (مستخدم)
ترحيب بالصدى: & auser.getName()
%>