xander
xander
خواندن ۳ دقیقه·۳ سال پیش

پریسما! خوب؟ بد؟ جلف؟

سلام به همه. من یه پروژه ای داشتم که قرار شد توی اون پروژه از دیتابیس postgred استفاده کنیم. منم از اونجایی که حال نداشتم برای کار با دیتابیس کوعری بنویسم تصمیم گرفتم از یه ORM استفاده کنم. پس از جست و جو های فراوان تصمیم گرفتم از پریسما استفاده کنم.


توی داکیومنت خوش نوشته Next-generation Node.js and TypeScript ORM.

به نظرم هم خوبی ها ی خودش رو داره و هم بدی های خودش رو. این نوشته تجربه شخصی من با prisma هست که دوست داشتم با شما به اشتراک بذارم.

اقا من رفتم تو داکیومنت این ORM (لینکش) برگام ریخت که انقدر قدرتمنده و این همه دیتابیس رو ساپورت میکنه. تازه برای دیتابیس های nosql مثل mongodb هم میشه ازش استفاده کرد. از این حرکتش خیلی خوشم اومد خدایی.

مرحله بعد رفتم دیدم مایگرشن هم داره و تغییرات رو میشه در قالب مایگرشن هم تو دیتابیس لحاظ کرد. خب اینم برا خودش یه نکته مثبت بود و من قبلا که با sequelize کار کردم یکم سخت بود کار کردن با مایگرشن ها.

خب هرچی هم باشه نوبت میرسه به اینکه چطوری توش مدل خای خودمون رو بنویسیم. من واقعا از این همه راحتی شگفت زده شدم. اول باید با دستور npx prisma init باید بگیم اقا من میخوام از پریسما استفاده کنم. وقتی این دستور رو اجرا میکنیم یه فایل .env برامون میسازه و یه پوشه به اسم prisma که توش یه فایل هست به اسم schema.prisma. توی فایل .env باید ادرس و یوزر و پسورد دیتابیس رو بهش بگیم. تو فایل shema.prisma باید مدل های خودمون رو بنویسیم.

نوشتن مدل ها توی پریسما واقعا راحت و جذابه، این یه مدل خیلی ساده هست که تو داکیومنت پریسما نوشته:


به همین راحتی مدل ها نوشته میشه و با دستور npx prisma migrate dec --name init مایگرشن هاش ساخته میشه و تو دیتابیس وارد میشه تغییرات.

اگه تغییرات دیگه هم بعد از این نیاز بود تو مدل ها با دستور npx prisma db push خیلی راحت میشه اون تغییرات رو تو دیتابیس اعمال کرد و یا یه مایگرشن دیگه ساخت و وارد دیتابیس کرد تغییرات رو.

همون طور که مدل نوشتن تو پریسما خیلی راحته، کار کردن باهاش هم خیلی راحته. یعنی شما به راحتی میتونید عملیات CRUD رو بدون اینکه دشواری داشته باشید روی دیتابیس انجام بدین.

تا الان فقط از خوبی های پریسما گفتم. اما این ORM بدون اشکال نیست و یه سری مشکلاتی هم داره. البته اینا از نظر من اشکاله و شاید از نظر یه نفر دیگه مزیت حساب بشه.

پریسما یه امکانی داره که وقتی یه محصول وارد جدول میشه، میتونید بگید الان این محصول که وارد شد فلان فیلدش رو بهم برگردون. اما تو insertMany این امکان وجود نداره و فقط تعداد محصولاتی که وارد شده رو بهتون برمیگردونه. دلیلش هم اینه که چون دیتابیس هایی مثل SQL SERVER این این قابلیت پشتیبانی نمیکنن. برای حل این مشکل باید هارد کوعری بنویسید که به نظرم خیلی جذاب نیست.

مورد بعدی که برام خیلی عجیب بود اینه که پریسما قابلیت upsert به صورت دونه به دونه رو داره اما نمیشه بهش گفت این ۱۰ تا محصول رو باهمدیگه برام upsert کن و برای حل کردن این قضیه هم باید هارد کوعری نوشت.

یادتونه گفتم توی insertMany نمیشه بهش گفت فلان فیلد رو برام برگردون؟
توی updateMany هم دقیقا همین قضیه صدق میکنه و نمیشه بهش گفت فلان فیلد که آپدیت کردی رو بهم برگردون و شما باید برای حل کردن این قضیه هم هارد کوعری بنویسید.

من توی این نوشته سعی کردم تجربه شخصی و نظرات شخصی خودم رو درمورد این ORM بگم. بازم تاکید میکنم اینا نظرات شخصی من بود و تجربه ای که تا الان با پریسما داشتم. البته که همه این چیز ها فقط یه ابزار توی برنامه نویسی هست که قراره ما بنا بر نوع استفاده از اونها، اونها رو انتخاب کنیم و ازش استفاده کنیم.

امیدوارم مفید بوده باشه. شما هم اگه نظری دارید خوشحال میشم تو کامنت ها برام بنویسید.

javascriptdatabasenodejsormجاوا اسکریپت
گونه ای نادر و کم یاب از برنامه نویس‌ها
شاید از این پست‌ها خوشتان بیاید