آشنایی با مفهوم Client/Server با استفاده از جاوا
بسیاری از برنامه نویسان ممکن است با چنین مفهومی آشنا نباشند و همین امر باعث میشود تا در پیاده سازی برنامه های خود با مشکل مواجه شوند. در این مقاله قصد داریم تا مفهوم Client/Server را با استفاده از یک مثال در جاوا توضیح دهیم.
در اینجا یک پروژه داریم که قصد داریم با استفاده از جاوا پیاده سازی کنیم. آموزش تکنولوژی ها و Framework هایی که در این مقاله استفاده میشود, در مقالات قبل بررسی شدهاست. در موقع استفاده از هر Framework لینک مقاله آن را نیز ذکر خواهیم کرد.
فرض کنید میخواهیم اطلاعات کاربران را ذخیره و نگهداری کنیم. این اطلاعات به دو صورت Web Client و Desktop Client در پایگاه داده ذخیره میشود. در ابتدا مفهوم و تفاوت Web Client و Desktop Client را بررسی خواهیم کرد.
تفاوت Desktop Client و Web Client
Desktop Client به شیوه ای از برنامه اطلاق میشود که کاربر از طریق یک نرم افزار تحت Desktop به Server متصل میشود و با Server تراکنش میکند. معمولا این نرم افزار ها در زبان جاوا با استفاده از JavaFx و یا Swing پیاده سازی میشوند. در مقابل Web Client به شیوه ای اطلاق میشود که کاربر از طریق مرورگر به یک Web Application متصل میشود و تراکنش میکند. وقتی میخواهیم با استفاده از Gmail یک رایانامه را ارسال کنیم, عملا در حالت Web Client از آن استفاده میکنیم. در مثال ساده تر, مرورگر خود یک Desktop Client است اما Wep Application هایی مانند Mail Server را که با آن اجرا میکنیم, از نوع Web Client هستند.
اگر بخواهیم اطلاعات در قالب Web Client به Server افزوده شوند, باید با استفاده از JSP یک صفحه برای دریافت اطلاعات طراحی کنیم و سپس پردازش آن را بر روی Servlet انجام میدهیم.
سپس باید لایه داده ها را پیاده سازی کنیم. در ادامه بخش لایه داده ها را بررسی خواهیم کرد.
لایه داده (Data Layer)
در این لایه داده ها و برقراری ارتباط با پایگاه داده مشخص میشود. یکی از بهترین روش ها برای ارتباط با پایگاه داده, استفاده از Hibernate است. با استفاده از Hibernate که یک ابزار ORM است میتوانیم با استفاده از متد ها و به صورت شی گرایی, با پایگاه داده ارتباط برقرار کنیم. در این مرحله باید مدل داده ای را مشخص کنیم. مدل داده, ساختار اطلاعات کاربران را مشخص میکند. اطلاعاتی از کاربران که میخواهیم در پایگاه داده ذخیره کنیم, در کلاس مدل به صورت Field ها مشخص میشوند.
تا به اینجا موارد لازم برای ذخیره سازی اطلاعات به صورت Web Client بررسی شد. اکنون نیاز است دسترسی ها را برای استفاده Desktop Client مشخص کنیم. برای این منظور ابتدا باید یک راه برای دسترسی به منابع Server تعریف کنیم و برای این منظور از RESTful API استفاده میکنیم. اکنون پیاده سازی RESTful را مورد بررسی قرار میدهیم.
RESTful در جاوا
یکی از بهترین روش های دسترسی به منابع Server استفاده از API است. امروزه معمولا از RESTful API برای پروژه ها استفاده میکنند. برای پیاده سازی RESTful در جاوا از Jax-RS استفاده میکنیم. وقتی JAX-RS را پیاده سازی میکنیم, یک URL در اختیار داریم که با استفاده از این URL میتوانیم اطلاعات را به Server ارسال و یا دریافت کنیم. در JAX-RS مشخص میکنیم که به ازاری هر نوع HTTP method چه عملی انجام شود. برای دسترسی به هریک از متد های موجود در RESTful API میتوانیم Sub Resource هایی را تعریف کنیم. برای مثال برای User Resource میتوانیم دو Sub Resource را به این صورت تعریف کنیم:
https://server-ip/api/users/informations https://server-ip/api/users/works
در اینجا informations و works دو Sub resource هستند که برای User Resource تعریف شدهاند. اکنون ما یک URL در اختیار داریم که میتوانیم از این طریق با Server ارتباط برقرار کنیم. اکنون به پیاده سازی Desktop Client میپردازیم.
استفاده از JavaFx
شیوه پیاده سازی یک Desktop Application با استفاده از JavaFx در این مقاله توضیح داده شدهاست. اکنون مدل دادهای که در Server استفاده کردهایم را به پروژه Desktop Application اضافه میکنیم. وقتی از JavaFx استفاده میکنیم, عملا به صورت MVC کدنویسی میکنیم. View برنامه با استفاده از ابزاری که JavaFx در اختیار ما قرار میدهد, پیاده سازی میکنیم. بخش مدل را هم از Server به پروژه اضافه کردهایم. اکنون نیاز است تا در Controller, متد های مورد نیاز برای جابجایی اطلاعات میان client و Server را پیاده سازی کنیم. برای ارسال و دریافت اطلاعات, از Retrofit استفاده میکنیم. پیاده سازی Retrofit در JavaSE مانند پیاده سازی در اندروید است. برای مثال فرض کنید یک Label و یک Button در JavaFx داریم و چنین متدی را برای کلیک Button مینویسیم:
@FXML public void buttonClick(ActionEvent actionEvent) { PostApi postApi = RetrofitFactory.createRequest(PostApi.class); postApi.getUsers("vhdrjb").subscribe(result -> label.setText(result)); }
نتیجه Callback را با استفاده از Lambda نمایش میدهیم.
در این مقاله سعی بر این شد تا با مفاهیم که تاکنون بررسی کردهایم, روش پیاده سازی یک پروژه Client/Server را آموزش دهیم. در این مقاله فقط به کلیات چنین پیاده سازی اشاره شد و جزئیات پیاده سازی پروژه را باید متناسب با ساختار و موارد مورد نیاز پروژه تعیین کنید.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سپاس قراوان از مطالب خوبتون
فقط ای کاش یک نظم و ترتیب و ردیفی هم توی اوردن مطالب رعایت می کردید…
سلام دوست عزیز. این مقاله صرفا جهت معرفی و آشنایی با این مفهوم هست. هر کدوم از بخش های این مقاله اگر براش مقاله ای نوشته شده باشه بهش ارجاع هم داده شده. هر کدوم از مقالات اگر پیش نیاز و یا ادامه داشته باشن هم اول و یا آخر مقاله ذکر میشه تا پیوستگی مطلب از بین نره. حالا اگر جایی این پیوستگی رعایت نشده بفرمایین تا لینک براتون بفرستیم. ممنون از همراهیتون