Notice: file_put_contents(): Write of 4976 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 16384 of 21360 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
Web Devs@fullStackDevs P.470
FULLSTACKDEVS Telegram 470
#Caching
#قسمت_دوم

🔹در قسمت اول به معرفی caching و جزئیات آن در asp core پرداختیم . حال نوبت به پیاده سازی است.
همانطور که گفته بودیم در این قسمت با استفاده ار یک الگوی Structural مشکلی که وجود داشت را حل خواهیم کرد.
▪️این الگو ، الگوی Proxy میباشد . بیایید نگاهی به این الگو بیاندازیم.
▫️این الگو شئ ای را به وجود میاورد که به عنوان یک placeholder یا یک جایگزین برای شئ دیگری عمل میکند و وظیفه آن کنترل دسترسی به آن شی است.در این پست این شی را Proxy object مینامیم.
و همچنین شئ ای که Proxy object کنترل دسترسی را بروی آن انجام میدهد hidden object مینامیم.

✳️ چه زمانی از الگوی Proxy استفاده کنیم ⁉️

▪️اگر زمانی نیاز داشتید تا رفتار یک شئ (hidden object ) را تغییر دهید (منظور از تغییر رفتار یک شی یعنی افزودن عملیاتی قبل یا بعد از اجرای هر یک از متد های آن است) بدون اینکه در تعریف متد های اصلی آن شی(hidden object ) تغییری دهید میتوانید از این الگو استفاده کنید همچنین استفاده از این الگو در سناریو های testing زمانی که میخواهید رفتار یک کلاس را در جاهایی بدون پیاده سازی ای برای آن جایگزین کنید، بسیار کاربردی خواهد بود.

حالا که با Proxy Pattern شدیم نوبت به استفاده از این الگو است .
🔹امروزه تقریبا همگی از الگوی Repository میکنیم همانطور که قبلا گفتیم " ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند " برای انجام این امر و همچنین انجام عملیات caching میخواهیم برای ریپازیتوری خود یک Proxy بنویسیم به طوری که قبل از صدا زده شدن متد های Repository مثل GetAll() فرایند چک کردن cache صورت گیرد و اگر داده ها در cache وجود داشتند به کاربر باز گردانده شوند.

▪️در این پست از روش Cache In Memory در AspNet Core استفاده میکنیم که برای فعال سازی آن باید سرویس زیر را در متد ConfigureServices کلاس startup اضافه کنید.
▫️services.AddMemoryCache();

بعد
از انجام اینکار انحام عملیات in-memoryCache را از طریق اینترفیس IMemoryCache دسترسی خواهید داشت و با تزریق آن در متد سازنده (Constructor) کنترلر یا هر کلاس دیگری، وابستگی های آن در زمان اجرا توسط سیستم تزریق وابستگی تزریق میشود.

🔹موارد لازم برای پیاده سازی

▪️اینترفیس زیر ،اینترفیس ریپازیتوری میباشد که دارای یک متد GetAll() میباشد.

``` 
public interface IStudentRepository
{
IEnumerable<Student> GetAll();
}```

▪️کلاس زیر هم ریپازیتوری میباشد که پیاده سازی کننده اینترفیس بالا است

```public class StudentRepository : IStudentRepository
{
public IEnumerable<Student> GetAll()
{
return dbContext.Students.ToList();
}
}```

▪️ حال proxy ریپازیتوری بدین شکل خواهد بود

```public class StudentRepositoryProxy
: IStudentRepository
{
private readonly IStudentRepository _studentRepository;
private readonly IMemoryCache _memoryCache;
private const string CacheKey = "WebDevsTelegramChannel";
public StudentRepositoryProxy(ServiceResolver serviceAccessor, IMemoryCache memoryCache)
{
_studentRepository = serviceAccessor("GetBasicObject");;
_memoryCache = memoryCache;
}


public IEnumerable<Student> GetAll()
{
if (_memoryCache.TryGetValue(CacheKey, out object temp))
{
return _memoryCache.Get<IEnumerable<Student>>(CacheKey);
}
else
{
var students = _studentRepository.GetAll();

_memoryCache.Set(CacheKey, students);

return students;
}
}
}
```
@fullStackDevs



tgoop.com/fullStackDevs/470
Create:
Last Update:

#Caching
#قسمت_دوم

🔹در قسمت اول به معرفی caching و جزئیات آن در asp core پرداختیم . حال نوبت به پیاده سازی است.
همانطور که گفته بودیم در این قسمت با استفاده ار یک الگوی Structural مشکلی که وجود داشت را حل خواهیم کرد.
▪️این الگو ، الگوی Proxy میباشد . بیایید نگاهی به این الگو بیاندازیم.
▫️این الگو شئ ای را به وجود میاورد که به عنوان یک placeholder یا یک جایگزین برای شئ دیگری عمل میکند و وظیفه آن کنترل دسترسی به آن شی است.در این پست این شی را Proxy object مینامیم.
و همچنین شئ ای که Proxy object کنترل دسترسی را بروی آن انجام میدهد hidden object مینامیم.

✳️ چه زمانی از الگوی Proxy استفاده کنیم ⁉️

▪️اگر زمانی نیاز داشتید تا رفتار یک شئ (hidden object ) را تغییر دهید (منظور از تغییر رفتار یک شی یعنی افزودن عملیاتی قبل یا بعد از اجرای هر یک از متد های آن است) بدون اینکه در تعریف متد های اصلی آن شی(hidden object ) تغییری دهید میتوانید از این الگو استفاده کنید همچنین استفاده از این الگو در سناریو های testing زمانی که میخواهید رفتار یک کلاس را در جاهایی بدون پیاده سازی ای برای آن جایگزین کنید، بسیار کاربردی خواهد بود.

حالا که با Proxy Pattern شدیم نوبت به استفاده از این الگو است .
🔹امروزه تقریبا همگی از الگوی Repository میکنیم همانطور که قبلا گفتیم " ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند " برای انجام این امر و همچنین انجام عملیات caching میخواهیم برای ریپازیتوری خود یک Proxy بنویسیم به طوری که قبل از صدا زده شدن متد های Repository مثل GetAll() فرایند چک کردن cache صورت گیرد و اگر داده ها در cache وجود داشتند به کاربر باز گردانده شوند.

▪️در این پست از روش Cache In Memory در AspNet Core استفاده میکنیم که برای فعال سازی آن باید سرویس زیر را در متد ConfigureServices کلاس startup اضافه کنید.
▫️services.AddMemoryCache();

بعد
از انجام اینکار انحام عملیات in-memoryCache را از طریق اینترفیس IMemoryCache دسترسی خواهید داشت و با تزریق آن در متد سازنده (Constructor) کنترلر یا هر کلاس دیگری، وابستگی های آن در زمان اجرا توسط سیستم تزریق وابستگی تزریق میشود.

🔹موارد لازم برای پیاده سازی

▪️اینترفیس زیر ،اینترفیس ریپازیتوری میباشد که دارای یک متد GetAll() میباشد.

``` 
public interface IStudentRepository
{
IEnumerable<Student> GetAll();
}```

▪️کلاس زیر هم ریپازیتوری میباشد که پیاده سازی کننده اینترفیس بالا است

```public class StudentRepository : IStudentRepository
{
public IEnumerable<Student> GetAll()
{
return dbContext.Students.ToList();
}
}```

▪️ حال proxy ریپازیتوری بدین شکل خواهد بود

```public class StudentRepositoryProxy
: IStudentRepository
{
private readonly IStudentRepository _studentRepository;
private readonly IMemoryCache _memoryCache;
private const string CacheKey = "WebDevsTelegramChannel";
public StudentRepositoryProxy(ServiceResolver serviceAccessor, IMemoryCache memoryCache)
{
_studentRepository = serviceAccessor("GetBasicObject");;
_memoryCache = memoryCache;
}


public IEnumerable<Student> GetAll()
{
if (_memoryCache.TryGetValue(CacheKey, out object temp))
{
return _memoryCache.Get<IEnumerable<Student>>(CacheKey);
}
else
{
var students = _studentRepository.GetAll();

_memoryCache.Set(CacheKey, students);

return students;
}
}
}
```
@fullStackDevs

BY Web Devs


Share with your friend now:
tgoop.com/fullStackDevs/470

View MORE
Open in Telegram


Telegram News

Date: |

The visual aspect of channels is very critical. In fact, design is the first thing that a potential subscriber pays attention to, even though unconsciously. Clear In the next window, choose the type of your channel. If you want your channel to be public, you need to develop a link for it. In the screenshot below, it’s ”/catmarketing.” If your selected link is unavailable, you’ll need to suggest another option. Members can post their voice notes of themselves screaming. Interestingly, the group doesn’t allow to post anything else which might lead to an instant ban. As of now, there are more than 330 members in the group. The creator of the channel becomes its administrator by default. If you need help managing your channel, you can add more administrators from your subscriber base. You can provide each admin with limited or full rights to manage the channel. For example, you can allow an administrator to publish and edit content while withholding the right to add new subscribers.
from us


Telegram Web Devs
FROM American