تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: کلاس Singleton

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Nov 2009
    پست ها
    1,257

    9 کلاس Singleton

    دروود امکانش هست کلاس سینگل تن رو شرح بدید؟ بدبختانه سایت ماکروسافت خیلی خیلی خیلی بد توضیح داده این مطلب رو

  2. این کاربر از iranch بخاطر این مطلب مفید تشکر کرده است


  3. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    کلاس هایی هستند که فقط باید یک نمونه (New) از آنها ساخته شود.
    این کلاس ها معمولاً خدماتی کلی و مدیریتی را به کلیه کاربران و کلیه جلسات جاری کاری (Session) ارائه میدهند.
    همچین کلاسی نباید درمقابل هر ریسمان (Thread) یا کاربر (User) یا جلسه کاری (Session) و... نمونه سازی شود و باید وضعیت و متغییرهایش برای همه حالات فوق حفظ شده و از اول جدید یا خالی نشود و اصولاً در این موارد معنی منطقی خاصی بر New شدن این کلاس ها وجود ندارد.

    مثلاً
    اگر در یک برنامه شبکه بخواهیم مدیریت کاربران آنلاین را داشته باشیم و Login و Logoff و کاربران آنلاین فعلی و... را بدانیم، بد نیست یک کلاس Singleton داشته باشیم که بین کاربران مشترک باشد (فقط یک نمونه New شده داشته باشد) و همه کاربران تحت عملیات های این کلاس Login و Logoff کنند و طبیعتاً این شی مشترک میتواند آمار دقیقی از کاربران آنلاین موجود هم ارائه دهد.

    مثال دیگر
    به عنوان نمونه شی Application در ASP.Net نوعی Singleton است.
    نمونه این شی برای تمام ریسمان ها، کاربران، جلسات، درخواست ها (Request) یگانه بوده و همواره با دستور System.Web.HttpContext.Current.Application قابل دریافت است.
    بدلیل اشتراک نمونه این شی بین کلیه موارد فوق الذکر در یک وب سایت ASP.Net اصولاً معنی ندارد که کسی بخواهد آن را New کند! هر کدی در هرجایی این شی بگیرد نمونه واحدی (یک اشاره گر یکسان برای همه) دریافت میکند و به همین دلیل است که چیزی که به این کلاس Add میکنید در همه جای دیگر قابل دریافت است یا Lock آن عملکردی سرتاسری دارد.

    و...

    در واقع راه بدتر در مقابل Singleton آن است که یک static class با چند متد static و تعدادی متغییر static داشته باشید.

    اگر فکر میکنید که در کلاسی به چندین متغییر بزرگ static نیاز دارید، احتمالاً Singleton راه حل منطقی تری خواهد بود.

    البته لازم بذکر است که برخی مواقع نیمه Singleton هایی داریم که فقط در یک شرایط خاص یکتا هستند.
    مانند شی Session در ASP.Net که در مقابل هر جلسه کاری (شما فرض کنید هر کاربر) یکتا و مشترک است.
    در واقع شی Session در ASP.Net بین تمام ریسمان ها و درخواست های یک کاربر مشترک و تک است ولی در سرتاسر برنامه یکتا نیست و هر کاربر تک Session مختص خود را دارد و در نهایت در یکلحظه شاید چندین Session موجود باشد.
    این قبیل نیمه Singleton ها هم با Singleton انحصاری کلی قابل پیاده سازی و تولید است.

    ==============

    در نهایت تا مطمئن نشدید که به کلاسی مشترک در کل چروژه نیاز دارید از Singleton استفاده نکنید.
    ترجیحاً تلاش کنید این کار را در پروژه تان در کمترین حد ممکن و فقط درصورت الزام منطقی انجام دهید.

    موفق باشید.
    Last edited by _H2_; 02-09-2013 at 19:31.

  4. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  5. #3
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    بسم الله الرحمن الرحیم
    با سلام
    فرض بفرمائید قصد داریم کد کاربری که لاگین کرده رو در کل برنامه داشته باشیم تا هر عملیاتی که انجام داد در هر فرمی، کدش هم در بانک ذخیره شود.
    در این حالت بهترین روش برای اینکه متغیر کد کاربر رو در تمامی فرم ها داشته باشیم چیست؟
    با سپاس فراوان

  6. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این بستگی به نوع برنامه دارد.
    چون چیزی گفتید که در شرایطی میتواند چندگانه باشد.
    در واقع میتواند یک Singleton کامل نباشد.

    مثلاً اگر برنامه شما تحت وب باشد یا یک سرویس دهنده تحت TCP/IP باشد، همزمان چند User در یک برنامه خواهید داشت.
    ولی
    اگر برنامه شما یک نمونه عادی تحت شبکه با دیتابیس SQL Server باشد، پس آنگاه هر برنامه شما فقط یک کاربر آنلاین دارد که زمان لوگینش مشخص میشود و تا انتهای خروج از برنامه ثابت است، یعنی یک Singleton واقعی و کامل.

    پس چون مثال خاصی زدید، اول باید مشخص شود برنامه و شرایطتان چیست.

  7. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  8. #5
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    بسم الله الرحمن الرحیم
    پس چون مثال خاصی زدید، اول باید مشخص شود برنامه و شرایطتان چیست.
    با سلام
    برنامه تحت شبکه با دیتابیس SQL Server.
    با سپاس فراوان

  9. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    برنامه تحت شبکه با دیتابیس SQL Server.
    چون در این شرایط با یک Singleton کامل طرف هستیم (هرکاربری exe خودش را اجرا میکند) ، میتوان پایه را از کد بسیار ساده ای مانند این آغاز کرد
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با کدساده ای مانند User.Current میتوان به مقادیر و فرامین مرتبط با کاربر جاری دسترسی پیدا کرد.
    مثلاً در فرم لاگین میتوان متد User.Current.Login را اجرا کرد یا اگر بخواهید نام کاربر را در جایی نشان دهید میتوانید از User.Current.Title یا User.Current.Username استفاده کنید.
    (((
    البته اگر بخواهید کامل به User بپردازید، کارهای زیادی میتوان کرد که با پیاده سازی واسط های استاندارد IPrincipal و IIdentity شروع میشود ...
    )))
    شب خوش

  10. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •