ورود

View Full Version : استفاده از چند سرویس یا یک سرویس حجیم



Mrs.Net
چهارشنبه 28 بهمن 1388, 11:09 صبح
تو یک پروژه حدود 6 کلاس هست که هرکدام کارهای جداگانه و نسبتا زیادی انجام میدهند
میخوام تمام این امکانات بصورت wcf به کلاینتها داده بشه
حالا دوتا انتخاب دارم
یا یک سرویس بسازم و داخل اون با متدها و کالبکهای زیاد به تمام این امکانات 6 کلاس دسترسی پیدا کنم
یا اینکه برای هرکدام این کلاسها یک سرویس بسازم و کلاینت با 6 سرویس وصل سرور بشه

خودم راه حل دوم برام راحتتره چون دیگه پیچیده نمیشه اما بنظرم راندمان پایین میاد.

آیا چندین سرویس ایجاد کردن برای یک برنامه اشتباه هست؟

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

In_Chan_Nafar
شنبه 01 اسفند 1388, 20:32 عصر
سوال شما بر مي گردد به قوانين SOA به مفاهيم زير خوب دقت كنيد و دقت كنيد سپس خودتان متوجه خواهيد شد كه چه كاري بايد انجام دهيد
1- مرز ميان سرويس ها كاملا مشخص است در حقيقت تكنولوژي و مكان بسته بندي شده و تنها داده و كاربرد مورد نياز (Functionality) در دسترس سرويس گيرنده ها مي باشند
2- سرويس ها مختارند يعني سرويس ها بدون وابستگي به ساير سرويس ها كار مي كنند و به شكل مستقل از هم كار مي كنند و مي توانند از خود در برابر اختلات به وجود آمده مواظبت كنند
3- سرويس ها يكسري قرارداد براي نمايش دادن عمليات و داده به اشتراك مي گذارند و نه Type‌مشخص
4- سرويس هاا بر اساس يكسري سياست با همديگر ارتباط برقرار مي كنند به زبان ساده سرويس چه كاري مي كندو سرويس گيرنده ها چگونه با سرويس ارتباط برقرار مي كنند.

------------
حال كار هر كدام از كلاس ها را توضيح بده و به مفاهيم بالا دقت كن راه حلي را هم كه خودت پيشنهاد ميدي بنويس تا در مورد اون بحث كنيم

Mrs.Net
شنبه 01 اسفند 1388, 23:57 عصر
ممنون از جواب
قبل از اینکه وارد جزییات بشوم باید بدونید که سرویس گیرنده و دهنده هر دو از یک نوع (ساختار ) هستند و تنها دلیل استفاده از ساختمان سرویس گرا خاصیت آنلاین بودن اطلاعات در عین جدایی سیستم بود.
یک پروژه عادی شامل:
-اطلاعات کالا با موجودی
-اطلاعات اشخاص
-اطلاعات فاکتورها
-اطلاعات تراکنشها
هر کدام از این اطلاعات توسط کلاسهای جداگانه انجام میشوند.
اطلاعات توسط سرور به کلاینتها پاس داده میشه (بایندینگ) و تغییرات هر کلاینت توسط کالبکها به سرور گزارش میشه و توسط کانالها به کلاینتهای دیگه گزارش داده میشه برای بروزآوری اونها

طبق اصول سرویس گرا هرکدام سرویسها جداگانه باید نوشته بشوند ولی آیا ایجاد ارتباط کلاینت با سرور حتما باید جداگانه باشه یا اینکه ایجاد یک ارتباط (کانال) بین کلاینت و سرور مفهوم سرویس گرا نقض نمیکنه؟
چون در سرور بهرحال سرویس ها جداگانه مدیریت میشوند اما هنگام ارسال دیتا به کلاینت توسط یک کلاس -که همان کلاس برقرارکننده ارتباط هست - استفاده میشود.

بهرحال نکته اصلی سوالم مربوط به تعداد کانالهایی هست که کلاینت با سرور ایجاد میکند.
یک کانال بین کلاینت و سرویس مدیریت کننده ی تمام سرویسها
یا
چندین کانال مستقیم بین کلاینت و هرکدام سرویسها

احتمالا خیلی گنگ توضیح دادم!