GraphQL، JavaScript، Preprocessor، SQL و موارد دیگر در Manifold

ما به آخرین قسمت از سری منیفولد خود رسیدیم، اما به پایان قابلیت های قابل توجه آن نرسیدیم. در طول این سری، ما به جنبههای مختلف Manifold پرداختهایم و ویژگیهای منحصر به فرد آن را برجسته کردهایم و نشان میدهیم که چگونه توسعه جاوا را افزایش میدهد. در این مقاله، برخی از ویژگیهای باقیمانده Manifold از جمله پشتیبانی آن از GraphQL، یکپارچهسازی با جاوا اسکریپت و استفاده از یک پیشپردازنده را پوشش خواهیم داد. با جمع بندی این ویژگی ها و تأمل در دانش به دست آمده در این سری، امیدوارم بتوانم قدرت و تطبیق پذیری منیفولد را نشان دهم.
https://www.youtube.com/watch?v=7PzaVwZ68II
گسترش Horizons با پشتیبانی GraphQL
GraphQL، یک فناوری نسبتاً جوان، به عنوان جایگزینی برای REST API ظاهر شده است. مشخصاتی را برای درخواست و دستکاری داده ها بین مشتری و سرور معرفی کرد و رویکردی کارآمدتر و کارآمدتر را ارائه کرد. با این حال، GraphQL می تواند چالش هایی را برای زبان های ثابت مانند جاوا ایجاد کند.
خوشبختانه، منیفولد با کاهش این چالشها و قابل دسترس کردن و قابل استفاده کردن GraphQL در پروژههای جاوا به کمک میآید. با حذف سختی جاوا و ارائه یکپارچه سازی یکپارچه با GraphQL، منیفولد به توسعه دهندگان این امکان را می دهد که از این سبک مدرن API استفاده کنند.
به عنوان مثال برای این فایل graphql که از مخزن Manifold گرفته شده است:
query MovieQuery($genre: Genre!, $title: String, $releaseDate: Date) {
movies(genre: $genre, title: $title, releaseDate: $releaseDate) {
id
title
genre
releaseDate
}
}
query ReviewQuery($genre: Genre) {
reviews(genre: $genre) {
id
stars
comment
movie {
id
title
}
}
}
mutation ReviewMutation($movie: ID!, $review: ReviewInput!) {
createReview(movie: $movie, review: $review) {
id
stars
comment
}
}
extend type Query {
reviewsByStars(stars: Int) : [Review!]!
}
ما می توانیم این نوع کد روان بنویسیم:
var query = MovieQuery.builder(Action).build();
var result = query.request(ENDPOINT).post();
var actionMovies = result.getMovies();
for (var movie : actionMovies) {
out.println(
"Title: " + movie.getTitle() + "\n" +
"Genre: " + movie.getGenre() + "\n" +
"Year: " + movie.getReleaseDate().getYear() + "\n");
}
هیچ یک از این اشیاء نیازی به تعریف قبلی ندارند، تنها چیزی که نیاز داریم فایل های GraphQL هستند.
دستیابی به برابری کد با یکپارچه سازی جاوا اسکریپت
در برخی موارد، الزامات نظارتی الگوریتمهای یکسانی را در کد مشتری و سرور میطلبد. این برای مواردی مانند محاسبات نرخ بهره رایج است که در گذشته از برنامه های Swing برای محاسبه و نمایش نرخ استفاده می کردیم. از آنجایی که هم Backend و هم Front-end در جاوا بودند، داشتن یک الگوریتم واحد ساده بود.
با این حال، زمانی که پیاده سازی سمت کلاینت به جاوا اسکریپت متکی باشد، این می تواند چالش برانگیز باشد. منیفولد با فعال کردن ادغام جاوا اسکریپت در پروژه های جاوا راه حلی را ارائه می دهد. با قرار دادن فایل های جاوا اسکریپت در کنار کد جاوا، توسعه دهندگان می توانند توابع و کلاس های جاوا اسکریپت را به صورت یکپارچه با استفاده از Manifold فراخوانی کنند. زیر هود، منیفولد از Rhino برای اجرای جاوا اسکریپت استفاده می کند و از سازگاری و برابری کد در محیط های مختلف اطمینان می دهد.
به عنوان مثال این قطعه جاوا اسکریپت:
function calculateValue(total, year, rate) {
var interest = rate / 100 + 1;
return parseFloat((total * Math.pow(interest, year)).toFixed(4));
}
می توان از جاوا به گونه ای فراخوانی کرد که گویی یک روش ثابت است:
var interest = Calc.calculateValue(4,1999, 5);
System.out.println(interest);
پیش پردازنده برای جاوا
در حالی که ممکن است عملکردی شبیه به پیش پردازنده در جاوا به دلیل ماهیت قابل حمل و کامپایل JIT غیر ضروری به نظر برسد، سناریوهایی وجود دارد که کد شرطی ضروری می شود. به عنوان مثال، هنگام ساخت برنامههایی که نیاز به رفتار متفاوت در محیطهای داخلی و ابری دارند، ممکن است پیکربندی به تنهایی کافی نباشد. از نظر فنی کار می کند، اما ممکن است بایت کد اختصاصی را در استقرار در سایت باقی بگذارد و این چیزی نیست که ما بخواهیم. راهحلهایی برای این کار وجود دارد، اما آنها اغلب برای چیزی نسبتاً ساده بسیار سنگین هستند.
منیفولد این نیاز را با ارائه قابلیتی شبیه به پیش پردازنده برطرف می کند. با تعریف مقادیر در build.properties
یا از طریق متغیرهای محیطی و آرگومان های کامپایلر، توسعه دهندگان می توانند به صورت مشروط مسیرهای کد خاصی را اجرا کنند. این انعطاف پذیری و کنترل را بدون توسل به ترفندهای ساخت پیچیده یا کدهای خاص پلت فرم فراهم می کند.
با منیفولد میتوانیم کدهای پیشپردازنده مانند:
#if SERVER_ON_PREM
onPremCode();
#elif SERVER_CLOUD
cloudCode();
#else
#error “Missing definition: SERVER_ON_PREM or SERVER_CLOUD”
#endif
تامل در قدرت منیفولد
در طول این سری، ما بسیاری از ویژگیهای مانیفولد را بررسی کردهایم، از جمله انعکاس ایمن نوع، روشهای توسعه، بارگذاری بیش از حد اپراتور، پشتیبانی از ویژگی و موارد دیگر. این ویژگی ها تعهد مانیفولد را به افزایش توسعه جاوا و پر کردن شکاف بین جاوا و پارادایم های برنامه نویسی مدرن نشان می دهد. با استفاده از Manifold، توسعهدهندگان میتوانند به کدهای تمیزتر و گویاتر دست یابند و در عین حال استحکام و ایمنی نوع زبان جاوا را حفظ کنند.
منیفولد یک پروژه در حال تکامل با بسیاری از ویژگیهای خاص است که در این مجموعه از جمله آخرین پشتیبانی از SQL صحبت نکردم.
در پروژه فعلی Spring Boot که در حال توسعه آن هستم، استفاده از Manifold را به Lombok انتخاب کردم. دلیل اصلی من این بود که این یک پروژه استارتاپی است، بنابراین تمایل بیشتری به ریسک کردن دارم. منیفولد به من اجازه میدهد خودش را بر اساس نیازهایم تنظیم کنم، من به بسیاری از ویژگیهای منیفولد نیازی ندارم و در واقع همه آنها را اضافه نکردهام. من احتمالاً نیاز به تعامل با GraphQL خواهم داشت و این یک عامل تعیین کننده بزرگ هنگام انتخاب Manifold از Lombok بود. تا کنون از نتایج و ویژگیهایی مانند entity beans با حاشیهنویسی ویژگیها بسیار راضی هستم.
من دلتنگ یادداشتهای سازنده Lombok هستم، امیدوارم چنین چیزی در نهایت به منیفولد راه پیدا کند. از طرف دیگر، اگر زمان پیدا کنم، ممکن است خودم این کار را اجرا کنم.
کلمه پایانی
همانطور که ما این سفر را در منیفولد به پایان می بریم، واضح است که این کتابخانه مجموعه ای غنی از ویژگی ها را ارائه می دهد که توسعه جاوا را به ارتفاعات جدیدی ارتقا می دهد. خواه ادغام GraphQL را سادهسازی کند، از برابری کد با جاوا اسکریپت اطمینان حاصل کند، یا کامپایل شرطی را از طریق رویکردی شبیه به پیشپردازشگر فعال کند، منیفولد به توسعهدهندگان این امکان را میدهد تا به راحتی با چالشهای پیچیده مقابله کنند. امیدواریم این مجموعه بینشهای ارزشمندی را ارائه کرده باشد و شما را برای کشف امکاناتی که منیفولد برای پروژههای جاوای شما به ارمغان میآورد الهام بخشد.
فراموش نکنید که قسمت های گذشته این مجموعه را بررسی کنید تا دامنه کامل قدرت منیفولد را به دست آورید.