آموزش پیشرفته EOS : بخش دوم – سینگلتون‌ها

در این بخش از مجموعه‌ آموزشی‌ پیشرفته‌ توسعه‌ EOS به سینگلتون‌ها (Singletons) می‌پردازیم. از سینگلتون برای ذخیره‌سازی وضعیت قرارداد استفاده می‌شود که نسبت به استفاده جداول بسیار به‌صرفه‌تر است.

0 166

برای مطالعه بخش اول اموزش پیشرفته EOS (هش‌های کریپتوگرافیک) اینجا کلیک کنید.

به مجموعه مقالات توسعه‌ی پیشرفته‌ی EOS خوش آمدید. در این مطالب به موضوعات و تکنیک‌هایی می‌پردازیم که به ندرت در آموزش‌ها و دوره‌ها پوشش داده شده است. هدف این مجموعه مقالات کنار هم قرار دادن نکات گمشده‌ای است که به عنوان توسعه‌دهنده‌ اپلیکیشن در شبکه‌ EOS باید از آن‌ها مطلع باشید. هر مقاله از این مجموعه بر اساس دشواری محتوای آن مرتب شده، بنابراین اگر می‌خواهید کار را از بخش اطلاعات عمومی شروع کنید، توصیه می‌کنم به سراغ بخش اول بروید. ما در این بخش می‌خواهیم به سینگلتون‌ها (Singleton) بپردازیم.

از آن‌جایی که این موضوعات بحث‌های پیشرفته و تکمیلی است، فرض ما این است که شما از اصول پایه آگاهی دارید و می‌خواهید اطلاعات خود را افزایش دهید. به همین دلیل کدی که در این مقاله به شما ارائه می‌کنیم، محدود به همان موضوعی است که قصد داریم درباره‌ی آن حرف بزنیم.

از سینگلتون‌ها برای ذخیره‌سازی وضعیت قرارداد، یا به عنوان جایگزینی برای جداول چند-شاخصه‌ای استفاده می‌شود آن هم وقتی فقط به یک ردیف نیاز است.

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

تعریف سینگلتون

برای مثال، ما برای ذخیره‌سازی وضعیت پیکربندی قرارداد خود از سینگلتون استفاده می‌کنیم. بگذارید سینگلتون خود را با استفاده از یک ساختار یا struct تعریف کنیم. در این راه از یک نوع داده‌ی بولی به نام closed و متغیری به نام char_count استفاده می‌کنیم تا بتوانیم اندازه‌ی پست کاربران را محدود کنیم.

 

سپس برای نمونه‌ی خود یک متغیر جانگهدار می‌سازیم و آن را در کل قراردادمان عمومی می‌کنیم.

 

اجرای سینگلتون

ما می‌توانیم سینگلتون را هر بار که از آن استفاده می‌کنیم یا آن را در بخش سازنده‌ی قرارداد فرا می‌خوانیم، اجرا کنیم تا در هر عملیاتِ قرارداد به آن دسترسی داشته باشیم. در این مثال نام قرارداد ما singletons است، ولی شما می‌توانید هر نامی که خواستید روی آن بگذارید.

 

مشابه جدول چند-شاخصه‌ای، اجرای سینگلتون هم مستلزم کد قراردادها و حوزه‌ی آن است. در این مثال، هر دو مؤلفه‌ی مذکور را به صورت _self تعریف کردیم.

دریافت مقادیر سینگلتون

حالا که سینگلتون را اجرا کردیم، می‌توانیم با خواندن مقدار char_count و چاپ آن در کنسول با مقادیر مربوطه تعامل داشته باشیم.

 

در این کد،  ()config.getسینگلتونی را که قبلا اجرا شده و آن را به متغیر وضعیت تخصیص داده بودیم دریافت می‌کند. حالا می‌توانیم با استفاده از dot notation به خصوصیات ساختار خود دسترسی پیدا کنیم.

تنظیم مقادیر سینگلتون

در این مثال مقدار char_count را با استفاده از تابع عضو dot notation بروز می‌کنیم. اما بگذارید دو روش بروزرسانی سینگلتون را به شما نشان دهیم.

روش اول – بروزرسانی برخط

ساده‌ترین روش این است که ساختار خود را به صورت برخط (Inline) بسازیم و آن را مستقیماً به تابع خود منتقل کنیم:

 

در این‌جا closed را به مقدار صحیح و char_count را با مقدار 172 تنظیم می‌کنیم، در حالی که delegating_self پرداخت‌کننده‌ RAM است. این روش برای زمانی که ساختار شما فقط حاوی چند خصیصه است و ترتیب آن‌ها را حفظ می‌شود بسیار کاربردی است، ولی برای ساختارهای بزرگ‌تر به روش بهتری نیاز داریم.

روش دوم – دریافت و بروزرسانی

در این‌جا باید با استفاده از روشی برای دریافت و بروزرسانی، قرارداد خود را دوباره باز کنیم. پس ابتدا وضعیت config را با استفاده از متد ()singleton.get دریافت کرده، مقدار closed را تنظیم می‌کنیم، و بعد دوباره وضعیت را مشخص می‌نماییم.

 

کار ما تمام شد! در قسمت بعدی به جدول چند-شاخصه‌ای می‌پردازیم و بر استفاده از شاخصه‌های ثانویه تمرکز می‌کنیم.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.