PS: Artikel yang ditulis oleh KJ Daniel, kemarin ketika saya ngobrol dengan seorang teman, saya menyebutkan pertanyaan perintah ADO, sebenarnya saya lupa tentang hal itu. Silakan membacanya. Umumnya, teman yang menulis kode ASP PHP mungkin menggunakan operasi langsung SQL~
Lihatlah kode berikut
<%
koneksi redup, rs
setel koneksi=BuatObjek(Adodb.Koneksi)
samb.buka....
set rs=conn.execute(pilih * dari berita);
...
Melintasi rs....
%>
Yang pasti kecepatan implementasinya cepat, tapi tentu saja satu setengah pernyataan dalam logika struktural tidak menjadi masalah! Masalah muncul jika terlalu banyak pernyataan!
Parameternya tidak terfilter, ada SQL injection, dll. Oke, sekarang mari kita ubah model desainnya!
Mengadopsi struktur 3 lapis + ORM
ORM: PEMETAAN HUBUNGAN OBYEK
Jadi apa itu teknologi ORM? Teman-teman yang sudah familiar dengan pengembangan JAVA .NET pasti tahu betul...itulah pemetaan relasional objek
Petakan tabel ke bidang kelas, petakan ke properti, dan petakan catatan ke objek... Sekarang ada banyak kerangka lapisan persistensi JAVA ORM
Misalnya, hibernasi ibatis EntityBean (salah satu EJB)
Bagaimana dengan ASP? Kita juga bisa mencapainya. Tunggu perkenalannya
Struktur 3 lapisan: lapisan presentasi WEB, lapisan tengah, lapisan persistensi
Berikut adalah tabel berita sederhana
membuat berita tabel(
identitas ke dalam,
judul varchar(200),
hubungi varchar(50000)
)
Kami memetakannya sebagai kelas
<%
Berita Kelas
id pribadi, judul, kontak
Sub setID(sid)
id=Cint(sid)
Akhiri Sub
Fungsi dapatkanID
dapatkanID=id
Fungsi Akhir
Sub setJudul(judul)
title=mid(stitle,1,200)'membatasi panjangnya
Akhiri Sub
....
Kelas Akhir
%>
Kemudian kita mendesain kode cara mengoperasikan database dan mengubahnya menjadi objek.
<%
Kelas NewsDataAccessObject
koneksi redup, rs, cmd
'Tanyakan sebuah berita
Fungsi getNewsByID(id)
set conn=Aplikasi(koneksi)' Dapatkan koneksi di kumpulan koneksi
set cmd=GetCmd() ' Implementasi fungsi GETCMD mengembalikan createobject(Adodb.Command)
selectString=pilih * dari NEWS dimana id = @id
cmd.ActiveConnection = samb
cmd.CommandType = adCmdText ' Konstan adCmdText=1
cmd.CommandText = pilihString
'Tambahkan parameter ke @id tadi, konstanta adInteger = 3 adParamInput=1
cmd.Parameters.Tambahkan cmd.CreateParameter(@id, adInteger, adParamInput, , id)
'Jalankan pernyataan SQL dan kembalikan kumpulan hasil
atur rs=cmd.eksekusi()
redup lagi
atur lagi=Berita baru
jika rs.eof maka
kalau tidak
baru.setID(rs(id)&)
anew.setTitle(rs(judul)&)
anew.setContect(rs(Koneksi)&)
berakhir jika
rs.tutup
atur rs=tidak ada
atur cmd=tidak ada
setel samb=tidak ada
atur getNewsByID=baru
Fungsi Akhir
'Masukkan artikel berita
Fungsi addNews (baru)
koneksi redup,cmd
jika kosong(baru) maka tambahBerita=salah
set conn=Aplikasi(koneksi)' Dapatkan koneksi di kumpulan koneksi
set cmd=GetCmd() ' Implementasi fungsi GETCMD mengembalikan createobject(Adodb.Command)
insertString=masukkan ke dalam nilai NEWS(id,title,contect)( @id , @title , @contect )
cmd.ActiveConnection = samb
cmd.CommandType = adCmdText ' Konstan adCmdText=1
cmd.CommandText = sisipkanString
'Tambahkan parameter ke @id @title @contect tadi, konstanta adInteger = 3 adParamInput=1 adVarWChar = 202
cmd.Parameters.Tambahkan cmd.CreateParameter(@id, adInteger, adParamInput, , anew.getID() )
cmd.Parameters.Tambahkan cmd.CreateParameter(@title,adVarWChar, adParamInput, 200, anew.getTitle() )
cmd.Parameters.Tambahkan cmd.CreateParameter(@contect,adVarWChar, adParamInput, 50000, anew.getConect() )
'Jalankan pernyataan SQL
cmd.eksekusi()
atur cmd=tidak ada
setel samb=tidak ada
tambahkanBerita=benar
Fungsi Akhir
Fungsi findByTitle(judul)
....
Fungsi Akhir
Fungsi getPageNews(halaman,ukuran)
....
Fungsi Akhir
Kelas Akhir
%>
Cara di atas adalah mengoperasikan database kemudian merangkum hasilnya ke dalam objek atau menulis objek tersebut ke dalam database.
Meskipun kecepatan implementasi ini akan sedikit lebih lambat, struktur logika keseluruhannya sangat jelas, dan tidak perlu peduli apakah variabel telah difilter atau multi-filter.
Desainer di lapisan halaman web lebih fokus pada antarmuka.
Tambahkan kode berita untuk dikirimkan di bawah
<%
redupkan id,judul,koneksi,baru,dao
id=Permintaan(id)
title=Permintaan.Formulir(judul)
kontak=Permintaan.Formulir(koneksi)
atur lagi=BERITA baru
baru.setID(id)
anew.setTitle(judul)
baru.setContect(koneksi)
set dao=NewNewsDataAccessObject
jika dao.addNews(baru) lalu
'respons.tulis
gema kesuksesan
kalau tidak
kesalahan gema
berakhir jika
%>
Lihat beritanya dan tampilkan
<%
redupkan id,dao,baru
id=Permintaan(id)
set dao=NewNewsDataAccessObject
atur lagi=dao.getNewsByID(id)
jika anew.getID()<> lalu
%>
Judul:<%=anew.getTitle()%>
Konten:<%=anew.getContect()%>
.....
Jika ada kesalahan atau kekurangan pada cuplikan kode di atas, terima kasih atas sarannya~~~
Dengan metode desain ini, tidak perlu menggunakan sistem artikel seperti XXXBLOG XXXBBS XXX
Lupa Ganti(SQL,','') dan injeksi terjadi!
Dalam hal kebersihan halaman, tidak akan ada pernyataan SQL. Artis seperti koneksi bertanggung jawab atas pekerjaan mereka sendiri dan kemudian menempatkan properti objek pada posisi yang sesuai.
Dan beberapa teman mungkin berpikir tentang otentikasi pengguna! Akan lebih mudah untuk memasukkan objek pengguna dari tabel pengguna ke dalam sesi.
<%
jika kosong(sesi(pengguna)) atau sesi(pengguna)= maka
'Melompat
kalau tidak
atur pengguna=sesi(pengguna)
gema selamat datang: & pengguna.getName()
%>