Dastur Talablari va Arxitekturasi
Dastur talablarini ishlab chiqish bu juda qiyin jarayon bolib dasturda
qanday bogalnishlar xavfsizligi funksionaligi va judda kop bolgan
talablarni oladi hamda ular bir birag mutonisbligi etibor qaratilishi kerak
malumotlar bazasini tanlash va boshqa fakturalani oz ichiga olishi lozim.
Buni ham ikkaga bolib qilinadi yani fumctional and non-functional
funksionalga dasturlash tilini tanlash malumotlar bazasini tanlash kabi
jarayonlarni oz ichiga oladi misol uchun instagramni olaylik agar biz rasm
yoki like bosishni oladigan bolsak buni funksional deb olsak boladi
aksincha esa agar usablity,reusibilty,Accesibilty ... va kopchiligi non
funksional bolgan jarayonga kiradi demak bazi bir dastur talablarini korib
chiqamiz
i.
Datsurlash tilini tanlab olish kripto valyuta web ilovasi bolgani
uchun webga yaxshi bolgan javascriptni tanlab olsak boladi yana
javascript tezliki tez boshqa boshqa dasturlashtillariga qaraganda
(PHP,PYTHON...) va boshqalar backend yozish uchun nodejs va uni
frameworki expressni tanlash frontend uchun esa reactjs va redux state
management uchun yana qoshimacha qilib aytish mumkinki nodejs
chrome v8 va libux va boshqa tez ishlaydigan enginelarda yozilgan v8 esa
c++ da yozilganligi uchun uni tezligi samaraliroq va single threaded
hisoblanadi.
ii.
Malumotlar bazasini togri tanlab olish bu kripto valyuta
ayriboshlash dasturni qilsihda mongodb malumotlar bazasidan foydalanish
yaxshidb oyliman chunki uni nodejsga integratsiya qilish oson hamda u
bilan ishlashham boshqa malumotlar bazasiga qaraganda osonroq NoSql
turidagi malumotlar bazasi hisoblanadi yani malumotlar jadval tarzida
emas bson tarzida malumotlar bazasida saqlanadi yani bunga array
typidagi malumotlani ham bemalol qiynalmasdan kirtsak boladi alohida
jadval yaratishga hojat yoq va havfsizlig boyicha xam yaxshi.
iii.
Endi esa UI(User Interface) qismi ham bu web ilovada katta rol
oynganligi sababli bunga javascriprning kuchli bolhan frameworkni tanlab
olsak bunga reactjs togri kelad react tez va samarali redux state
managment ga formik esa form controlga tanlab olamiz.
iv.
Web ilovasi bolgani uchun buni logikal bolishimiz kerak
buning uchun MVC(Model View Controller) modelidan foydalansak
boladi hozigi kunda dastruchilar tomonidan keng foydalanilmoqda.
v.
Endi esa server yaratish unda nodejsni ozini serveridan
foydalanamiz.
vi.
Endi esa malumotlar bazasini shakillantrisak bu joyda user
(admin ,super admin,user) larni ozi ichigda olgan holda hamyon
(user)larga tegishli boladi demak comment yozish mumkin bunga
comments degan collection yaratmiz va tolovlar haqidagi malumotlani oz
ichiga saqlaydigan malumot bazasi ham bolishi kerak bu foydalanuvchi
qachon pul tolagan va qaysi maqsaddagi malumotlarni oz ichiga oladi
vii.
Malumotlar bazasi shakillangan dan keyin controllerni yozib
chiqishimiz kerak misol uchun userlarni royhatga olish royhatdan
chiqarish yanglash o’chirib tashlash kabi CRUD(Create READ UPDATE
DELETE) bolgan authentigikatiya controllerni qilishimiz kerak bularda
agar userlar passwordni esdan chiqarishsa forgot password reset password
kabi routerlarni ham ozi ichiga oladi hamda email boyicha yashirin tokkeni
ham jonatishni oz ichiga oladi.Yana error controllerlani yam esdan
chiqarmaslik kerak bunda hamma errorlar bitta markaziy bolgan error
controller qilish ham esdan chiqmaslii kerak.Commentlarga ham CRUD ni
yozish kerak ba maxfiy kodni hashlab malumotlar bazasiga joylab qoyish
ham esdan chiqmasligi kerak bunda bcrypt dan foydalanamiz token
jonatishda esa jsonwebtoken bularning ichida judda kop bolgan jarayonlar
controllerlar yotadi shuning bilan birga rolelarga ham bolib chiqishiz kerak
token via cookie bochia maxfiy saqlashimiz kerak bular faqat userlarga
bogliq bolgan jarayondir commentlarga kelsak bu jarayonda malumotlar
bazasini boglashni korib chiqishimiz kerak va oxirgi jarayonda wallet yani
hamyon bilan bogliq bolgan controllerlarni korib chiqishimiz kerak boladi
bu jarayon kop vaqtni oz ichiga oladi
viii.
Demak bu jarayonda esa malumotlar bazasini boglash boyicha
jarayonlarni korib chiqishimiz kerak boladi bu judda muhim bolgan
jarayondir junki web ilovada berilgan malumotlar boyicha
foydalanuvchilar kommentlar yozishi mumkin bu holda qaysi
foydalanuvchi nimaga qisiqsihi yoki shu foydalanuvchi yogan kommentini
ochirishi yoki yangilashi mumkin boshqa foydalanuvchilar bu kommenr
kim tomondan yozilganligini bilishni hohlab qolishlari mumkin bolgani
uchun ham bu jarayon muhimdir shuningdek tangalarni sotisha qaysi
foydalanuvchi tangani harid qilomqchi va shunga oxshash jarayonlarni
korib chiqish kerakli boladi.Oldin aytilgan dastur talablariga binoan
malumotlar bazasi boyicha ozgina malumot berilgan edi bunda mongodb
dan foydalanamiz va u NoSql turiga kirishi boyicha gaplashgan edik endi
esa collectionlarni bir birga boglash boyicha mulohaza yurtamiz bunda
keng qolaniladigan parent ref and child ref yani embeding yoki
normalization parent ref misol uchun man komment qoysam parent ref
bolsa bu malumotlar bazasiga id boyicha kiradi child ref bolsa unda bu id
boyicha kirmidi lekin bu kommentni kim qilagani boyicha id boyicha ref
qilinadi kommentga embeding qilgan yaxshi fikr emaschnki agar bir kishi
10 komment yozsa bu malumotlar bazasida joyni ham kop egalaydi query
qilish ham qiyinchilik qiladi har doim malumotlar bazasidagi bu ikki
jihatga etibor qaratishligimiz lozim deb oylayman demak commentlarni
user bilan boglab chiqishimiz kerak boladi.
ix.
Bu jarayonda esa biz wallet yani hamyon collectionini ishlab
chiqshimiz kerak bu jarayondan keyin controller ham user lar bilan
boglash kerak boladi.Demak bu collection qilingandan keyin
foydalanuvchilar coinlarni sotib olish kabi jarayonlani oz ichiga oladi
hamda har bitta kishida qancha qoin borligini ham sanam qoyishimiz kerak
bu jarayonda har bir kishiga secret token berishimiz kerak boladi agarda
amda userlani emailiga hashlanmagan plain token jonatihsi kerak boladi u
jarayon muhim junki malumotlar bazasidagi secret token va userladagi
lain token tekshiriladi va ular togri bosa foydalanuvchilar coinlarni olish
va sotishlari uchun kerak boladi va bu jarayonda generatsiya sonlari kop
bolishi judda zarur qancha kop generatsiya kop bolsa shuncha murrakab
token hosil qilishimiz mumkin har bir sotishda va olishda userlardan plain
va secret tokenlar tekshirilishi kerak boladi bu jarayon xavfsizligni
oshirish uchun judda kerak jarayon deb o’ylayman va bu ishlarni wallet
collectionda qilganimiz yaxshi chunki biz MVC(Model View Controller)
modelidan foydalanmoqchi edik malumotlar bazasi bilan bogliq bolgan
jarayonlarni controller bilan arlashtirmsaligimiz judda muhim jarayondir
shuning uchun token generator qilish malumotlar bazasiga tegishli
jarayondir tekshirish esa controllerga bogliq jarayon yana bu malumotlar
bazasiga foydalanuvchilar tolov haqidagi malumotlarni saqlaydigan
malumotlar bazasini bir biri bilan boglashimiz kerak bunda qaysi
foydalanuvchilar tolov qilgan qaysi maqsadaligini eslatib turadi va
foydalanuvchilar qachon hohlasa shunda bu joyga kirib nima maqsada va
qancha pul miqdorini tolganani bilib olishlari mumkin va bunda yillik coin
sotib olishlar va sotib olishlar saqlanadi umimiy coinlar soni esa wallet
malumotlar bazasida saqlansa yaxwi malumotlar bazasida qanday
maydonlar bolishi bu judda ichiga kirish bu jarayonlar kodlash qismida
qilinadi shuning uchun bilar haqida malumot bermadim wallet har bir user
bilan boglash ham qilinishi kerak boladigan jarayon
x.
Endi esa controller haqida dasdastur talablari va arxitekturasi haqida
qisqacha qilinadigan ishlar qilinadi bular haqida tepada ham
malumot berilgan edi bunda faqat authController va errorController
bor edi enda esa walletController,commentController va
historyController ham qilinadi historyController bu foydalanuvchilar
ozlarining tngalarini sotib olganlari va sotganlari haqida malumotni
saqlaydigan controller errorlani oziniyam ikki turga bolib qilamiz
yani opretional yani boshqarasa boladigan va boshqarsa bolmaydigan
misol uchun foydalanuvchilar bir hil email kiritsabu email bor digan
rror chiqaraib bersa bu opretional boladi va uni dasturda toglrlab
oydalanuvchilar haiqatan nimani hato qilgani haqida eslatma
eradigan va agar server hatolik berib qolsa bu dastru tuzish
arayonida togrlab bolmaydi va buning uchun 500 server error jotasa
ogri kelsa kerak deb oylaman va authControlle bu eng qiyin
arayondir foydalanuvchilar bu jarayonda royhatdan otish token erish
agar ular maxfiy kodni unutsa yangilash routerlari boladi bular aqida
qisqacha malumot berganman va foydalanuvchilarga email onatisha
agar ular parollarini unitib qoyishsa rolelar berish ham aynan auth
controllerda qilinadigan jarayon bullar middelware da qilinadi
middelware bu assosan sorov va javob orasida qanday dir vazifani
bajaradi shuning uchun ham nodejs tez va keng ishlatilmoqda
authControllerda user collection bilan muloqat qiladi yani email
foydalanuvchilarni ismi paroli(hash)langa holda saqlanadi
commentlarga kelsak bunda CRUD(Create Read Update Delete)
controllari bolib bunda koment yozish o’chirib tashlash yangilash
mumkin va barcha kommentlar qoyilshi mumkin faqat kommentni
yozgan foydalanuvchi buni o’chirishi yangilashi mumkin boshqalar
esa faqat kora oladi walletda sotib olish, sotish va tasdiqlash kabi
routerlar bolib agar foydalnuvchi tangadan harid qilmochi bolsa
tasdiqlash bunda fodalanuvchiga berilgan tokeni kiritib malumotlar
bazasidagi secret bolgan token bilan solishtiriladi agar togri bolsa
sotib ilish va sotish mumkin boladi hato bolsa yana ikki marta urinish
beriladi yana hato bolsa unda u foydalanuvchi 1 haftaga blokirovka
qilinadi bu ham xavfsizligini oshirish uchun judda kerak boladi va
foydalanuvchilar tarixi faqat aynan har bitta user uchuin alohida
boladi uni boshqa foydalanuvchilar kora olmaydi va unda pdfni
yuklab olsa boladigan router ham boladi bunda pdfni yuklab olsa
boladi.
xi.
Bu jarayonda tashqaridan malumotlar olib keladigan api qilish kerak
boladi foydalanuvchilar boshqa kripto valyutalar haqida ham
malumot olishlari mumkin bozor haiqdagi malumotlar xam shu joyda
saqlanadi va mening crypto valyutamni osishi va kamayishini ham
shu joydan korsa boladi bu ham foydalanuvchi talabi ham dastur
talabi desak xato bomsa kerak
Bular eng kerak boladigan jarayondir kodlash jarayonida esdan
chiqarmaslik kerak bolgan joyi boshqa joylari esa kodlash jarayonida
yuzaga keladi menimcha har bir narsani detaligacha o’ylab chiqish iloji
bomasa kerak loyihani qilish jarayonida oldin aytganimdek bu eng qiyin
bo’lgan web ilovadir bu 6oydan 1 yilgacha vaqtini oz ichiga oladi hamda
bazi bir xavfsizligi paketlari bor bular ham kodlash jarayonida amlaga
oshiriladi va bazi bir tashqaridan kerak bolgan api lardan ham
foydalanamiz chunki shunda web ilova koproq flexible boladi bu
jarayonda xam tashqaridan keladigan malumotlarga extiyotkor bolish
kerak bunda web ilovaga bolgan hujim tashqi api boyicha qilinishi ham
mumkin bolgan joylarini etiborga olish kerak boladi
Do'stlaringiz bilan baham: |