آشنایی با ORM ها با Prisma.io !

تکنولوژی ORM چیست و چگونه کار میکند؟احتمالا براتون پیش اومده که ایده ای قوی داشته باشید و برای پیاده سازیش به اپلیکیشن نیاز داشته باشید. برای ساختن و توسعه یک برنامه ایده آل باید به قابلیت نگهداری آن، ارتقاء پذیری و بهبود عملکرد کلی با استفاده از تکنولوژی های جدید به مرور زمان نیز فکر کرد.این عوامل ضروری برای مدت طولانی برنامه را پایدار نگه میدارند و به کسب و کار ها اجازه میدهند که به نتایج خوب برسند. یکی از این عوامل که میتواند باعث سریع تر شدن روند توسعه نرم افزار شود، استفاده از ابزار های ORM هست.برای درک بهتر این مطلب شما به این مهارت ها نیاز خواهید داشت:آشنایی با VsCodeآشنایی با زبان های JavaScript و TypeScriptدانش خیلی سطحی در رابطه با Database هاآشنایی با Node.Jsمبحث Object-relational Mapping (ORM) چیست؟به زبان ساده، Object-relational mapping (ORM) یک لایه هست که اطلاعات رو بین Database و Object-oriented entities با استفاده از برنامه نویسی شیء گرا (OOP) به همدیگه تبدیل میکنه.Object Relational mappingابزار زیادی برای ORM در بازار موجود هست، و ما امروز از یکی از آنها به نام Prisma.io استفاده میکنیم.آماده سازی محیط ها برای شروع کار!مهم ترین قسمت برنامه نویس بودن JavaScript این هست که Node.Js رو نصب داشته باشید رو سیستمتون ?اگر Node.Js رو نصب ندارید با استفاده از این لینک به سایتش برید و حتما ورژن Long Term Support (LTS) رو دانلود کنید.How to download nodejs حالا بریم سراغ نصب PostgreSQL، چیزی که قراره به عنوان Database ازش استفاده کنیم.از این لینک ورژن مربوط به سیستمتون رو انتخاب کنید و نصب کنید.بعد از نصب برنامه pgAdmin رو بیارید بالا که سرور دیتابیس رو اماده کنیم.(تو این برنامه باید یه پسورد درست کنید اولش، خیلی جاها این پسورد رو میخواد از شما، یادتون بمونتش حتما)مرحله 1: روی Servers راست کلیک کنید، Create رو بزنید و روی Server بزنید.step 1مرحله 2: Name رو دلخواه میتونید بزارید، من گذاشتم Virgool.step 2مرحله 3: از بالای این قسمت برید توی Connection و Host name/address رو بزارید localhost، فیلد password هم باید پسوردی که اول برنامه وارد کردید رو بزنید. لازم نیست چیز دیگه ای عوض شه.step 3دیتابیس ساخته شد و بعدا ازش استفاده میکنیم توی کُدمون.step 4نوشت کد و وصل کردن Database و Prisma !برای این پروژه ما از VsCode استفاده میکنیم همونطور که بالاتر گفتیم، اگر نمیدونید چی هست میتونید از اینجا دانلود و نصبش کنید، آموزش استفاده ازش هم خیلی زیاد هست توی اینترنت.یک فولدر درست کنید و VsCode رو ازونجا اجرا کنید.vscodeتوی این صفحه دکمه های Ctrl + shift + C رو بزنید که cmd باز بشه.cmdحالا دستورات لازم به شروع پروژه رو وارد میکنیم که کد زدن رو شروع کنیم!مرحله 1: دستور زیر رو وارد میکنیم تا پروژمون توسط Node package manager (npm) درست شه.npm init -yمرحله 2: دستور زیر رو وارد میکنیم تا پکیج هایی که لازم داریم نصب شن، همراه با Prisma و TypeScript.npm install prisma typescript ts-node @types/node --save-devمرحله 3: یک فایل با اسم tsconfig.json درست میکنیم و کد زیر رو توش مینویسیم.{ &quotcompilerOptions&quot: { &quotsourceMap&quot: true, &quotoutDir&quot: &quotdist&quot, &quotstrict&quot: true, &quotlib&quot: [&quotesnext&quot], &quotesModuleInterop&quot: true } }tsconfigمرحله 4: با استفاده از دستور زیر Prisma CLI (command line interface) رو راه میندازیم.npx prismaمرحله 5: دستور زیر 2 کار رو برای ما انجام میده:یک فولدر جدید با نام prisma درست میکنه که یه فایل با اسم schema.prisma توش هست، این فایل مدل های دیتابیس و طریقه وصل شدن به دیتابیس رو معرفی میکنه.فایل .env رو درست میکنه که برای تعریف کردن متغیر های محیط استفاده میشه. (مثلا کانکشن دیتابیس)npx prisma initبریم سراغ وصل کردن دیتابیس و به پروژمون!برای اینکار باید DATABASE_URL داخل فایل .env رو عوض کنیم و جایگزینش کنیم با آدرس دیتابیسی که ساختیم..envبریم ببینیم این قسمتای قرمز چی میگن:قسمت 1: فقط نشون دهنده اینه که داریم از PostgreSQL استفاده میکنیم، نیازی نیست عوض شه.قسمت 2: این قسمت باید عوض شه با username که انتخاب کردید توی pgAdmin.قسمت 3: قسمت هم باید با پسوردتون توی pgAdmin عوض شه.قسمت 4: قسمت Host name/address سرورتون هست.قسمت 5: پورت سرورتون هست.قسمت 6: این قسمت رو با Virgool جایگزین کنید که دیتابیس با این اسم درست شه توی pgAdmin.قالب این url هم به این شکل هست:postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMAاستفاده از Prisma Migrate.با استفاده از قابلیت Migrate میتونیم مدل هایی که مینویسیم رو از لایه ORM به دیتابیس تبدیل کنیم.اول بریم سراغ نوشتن مدل هامون.برای اینکار به فولدر Prisma توی پروژمون میریم و وارد schema.prisma میشیم و این کد رو مینویسیم:model Scores { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) score Int lesson String user User @relation(fields: [userId], references: [id]) userId Int } model User { id Int @id @default(autoincrement()) email String @unique name String age Int? Scores Scores[] }که نهایتا فایل ما به این شکل خواهد رسید:schema.prismaخب بریم سراغ اینکه کدی که نوشتیم چی هست و چیکار میکنه؟با استفاده از model یک مدل رو تعریف میکنیم که اسم مدل کلمه ای هست که بعد از model میاد، مثلا Scores یا User.داخل مدل قالب به این صورت هست NAME TYPE MODIFIERS. بعنون مثال id داخل مدل user، اولین چیز id هست که name هست، دومی تایپ اون دیتایی هست که قراره ذخیره شه هست که اینجا Integer هست که با Int نشون دادیم. سومین مورد که اکثرا طولانی ترین و مهمترین قسمت هست Modifiers هست که برای id، مودیفایر @id و @default رو داریم. @id کارش این هست که مشخص کنه توی دیتابیس این row رو بعنوان id بشناسه، و @default هم کارش اینه که حتی اگه دیتا داده نشه بهش اون مقداری که داخلش هست رو به عنوان دیتای default انتخاب میکنه، تو این مورد بهش autoIncrement() دادیم که این فانکشن رو خود prisma ساپورت میکنه و کارش این هست که بصورت اتوماتیک اون عدد id رو به تعداد دفعه هایی که دیتا ساخته میشه زیاد میکنه.تمام این Modifier ها رو میتونید تو اینجا ببینید.خب حالا بریم سراغ تبدیل کردن این مدل ها از OOP به دیتابیس.برای اینکار بعد از نوشتن مدل ها این دستور رو وارد میکنیم:npx prisma migrate dev --name initکاری که این دستور انجام میده:یه فایل SQL Migration جدید درست میکنه.از این فایل Migration استفاده میکنه تا مدل هارو توی دیتابیس درست/آپدیت کنهمیتونید بعد از اینکار pgAdmin رو رفرش کنید و تغییراتی که انجام دادیم رو ببینید! نصب کردن کلاینت Prisma.برای استفاده از قابلیت های کامل Prisma باید پکیج کلاینتش رو نصب کنیم، که با این دستور اون کار رو انجام میدیم:npm install @prisma/clientکار هایی که این دستور انجام میده رو با عکس زیر توضیح میدم:prisma clientمرحله 1: پکیج داخل node_modules نصب میشه.مرحله 2: اتوماتیک دستور prisma generate اجرا میشه.مرحله 3: پکیجی که نصب کردیم (Prisma CLI) از داخل فایل schema.prisma مدل هایی که نوشته شده رو میخونه.مرحله 4: وقتی مدل هارو خوند اونارو برمیگردونه به کلاینت prisma که بتونیم توی کد ازشون استفاده کنیم.مرحله 5: این مدل های آپدیت شده رو به پکیج برمیگردونه که اونجا نگه داری شن. (در صورتی که فایل schema.prisma مشکلی براش پیش اومد فایل های ما خراب نشن)**این نکته رو حتما یادتون نره که فقط ایندفعه خودش برامون دستور prisma generate رو میزنه و اگر دفعه های بعدی schema.prisma رو عوض کردیم حتما باید دستور رو خودمون وارد کنیم که تغییرات به API کلاینت برسه و آپدیت شه!کوئری کردن دیتابیس و کار کردن با Prisma Client.حالا که کلاینت آمادس بریم سراغ نوشتن کد برای read و write کردن توی دیتابیس.برای اینکار من توی پروژه کد رو بصورت Node.js خالی مینویسم که قابلیت های ابتدایی prisma رو بهتون نشون بدم و آشناتون کنم با این تکنولوژی.برای شروع یک فایل به نام index.ts داخل پروژه درست کنید و کد های زیر رو توش بنویسید:import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() async function main() { // query haro in dakhel minevisim } main() .catch((e) => { throw e }) .finally(async () => { await prisma.$disconnect() })اگه این کد رو اجرا کنیم هیچ اتفاقی نمیوفته، چون هنوز کوئری به دیتابیس نزدیم.برای نوشتن کوئری ها، کد هارو توی main() مینویسیم، این کد رو مینویسیم:const allUsers = await prisma.user.findMany() console.log(allUsers)که تابع main به این شکل در میاد:mainحالا برای اجرای کد، این دستور رو وارد میکنیم:npx ts-node index.tsوقتی دستور اجرا شه میبینیم که توی کنسول فقط به ما یه لیست خالی میده، که منطقی هم هست چون هنوز هیچ دیتایی ندادیم بهش، پس بریم که یکم اطلاعات بریزیم و دیتابیس!نوشتن اطلاعات روی دیتابیس.داخل تابع main این کد هارو جایگزین میکنیم:await prisma.user.create({data: {name: &quotMohammad reza&quot,email: &quotmohammad@gmail.com&quot,age: 20,Scores: {create: {lesson: &quotcomputer&quot,score: 90,}}}}) const allUsers = await prisma.user.findMany({include: {Scores: true}}) console.dir(allUsers, {depth: null})که تابعمون نهایتا به این شکل در میاد:createبعد از ذخیره و اجرای این کد ها، چیزی که در کنسول میبینیم به این شکل هست:consoleتا الان تونستیم عمل های read و write رو آشنا شیم باهاشون و انجامشون بدیم، آخرین چیزی که میمونه update هست، پس بریم سراغش.آپدیت کردن اطلاعات در دیتابیس.داخل تابع main این کد هارو جایگزین میکنیم:const score = await prisma.scores.update({where: {id: 1},data: {score: 100}}) console.log(score);که تابعمون نهایتا به این شکل در میاد:updateبعد از ذخیره و اجرای این کد ها، چیزی که در کنسول میبینیم به این شکل هست:consoleو میبینیم که نمره درس از 90 به 100 تغییر کرد.این مقاله در رابطه با آشنایی Prisma نوشته شده و اگه از نظرتون تکنولوژی خوبی هست و بدردتون میخوره، یا خواستید راجبش بیشتر مطالعه کنید، از اینجا میتونید داکیومنت های سایت اصلی رو بخونید و از پتانسیل کامل Prisma استفاده کنید.نویسنده: محمدرضا دیده خانیاستاد ناظر: دکتر مریم حاجی اسمعیلی. دکترای علوم کامپیوتر از دانشگاه کینگستون لندن