نظرات مطالب
پشتیبانی توکار از ایجاد کلاس‌های Singleton از دات نت 4 به بعد
- مبحثی که در اینجا مطرح شده، مرتبط با حالت‌های عدم استفاده‌ی از سیستم تزریق وابستگی‌ها است. البته می‌توان این نوع Container‌ها را در حالت «service locator»، در همه‌جا استفاده کرد و محدودیتی هم ندارند.
- اگر از یک سیستم تزریق وابستگی‌ها استفاده می‌کنید، مطلب جاری را فراموش کنید. یک کلاس معمولی را ایجاد کرده و یک اینترفیس را از آن استخراج کنید (مانند همیشه و بسیار عادی). سپس این اینترفیس و کلاس پیاده سازی کننده‌ی آن‌را با «طول عمر» singleton به این IoC Container معرفی کنید (مهم نیست نام آن IoC Container چیست. این روش همه جا کار می‌کند). اکنون چون مدیریت طول عمر این سرویس توسط IoC container مورد استفاده کنترل می‌شود، می‌توانید در سازنده‌ی آن تمام سرویس‌های دیگر را هم تزریق کرده (مانند تمام سرویس‌های دیگر تعریف شده) و استفاده کنید؛ چون وهله سازی و مدیریت طول عمر آن توسط خود Container مدیریت می‌شود.
- استفاده و یا تعریف متدهای Async در اینجا هیچ تفاوتی با قبل ندارد. همان امضای متدهای Task دار و در صورت نیاز async دار را ارائه دهید.

یک نکته: تزریق وابستگی‌ها در سازنده‌ی کلاس‌هایی با طول عمر singleton یکسری نکات خاص خودشان را دارند.
نظرات مطالب
جلوگیری از ارسال Spam در ASP.NET MVC
با تشکر از شما. چند نکته از لاگ‌های استخراج شده‌ی سایت جاری:
- این برنامه‌ها، user agent‌های متفاوتی را به ازای هر درخواست ارسال می‌کنند (عموما). بنابراین مورد دوم هم علاوه بر مورد سوم نباید بکار گرفته شود.
- دو نوع هش در حالت کلی وجود دارند. هش‌های سریع و هش‌های امن. هش‌های امن سعی می‌کنند این تضمین را ارائه دهند که به ازای یک ورودی مشخص، خروجی منحصربفردی را تولید کنند؛ اما ... با قیمت کندتر بودن عملیات هش. هش‌های سریع، مانند xxHash، برای یک چنین مواردی که نیاز هست کلید کش تولید شود بکار گرفته می‌شوند. الزاما مانند هش‌های امن سعی در تولید خروجی‌های منحصربفردی نمی‌کنند، اما تا این اندازه دقیق هستند که در بانک‌های اطلاعاتی key-value store فوق سریعی مانند Redis از آن‌ها استفاده می‌شود. بنابراین در یک چنین مواردی مانند سناریوی جاری بهتر است از هش‌های سریع استفاده شود. البته اگر آدرس صفحه و همچنین UA را حذف کنیم، نیازی به هش کردن نخواهد بود؛ چون IP را می‌توان بعنوان کلید درنظر گرفت.
- بررسی UA از دیدگاه دیگری به صورت جداگانه می‌تواند مفید باشد. تشخیص بات‌های شناخته شده و بستن دسترسی آن‌ها.
نظرات مطالب
راهنمای گام به گام انتقال پروژه از MVC 5 به MVC 6
یک نکته:
اگر از نسخه‌ی ASP.NET 5 RC در visual studio استفاده میکنید، این نسخه نسبت به نسخه‌های بتا، تغییراتی در ساختار پروژه داشته است. از جمله اینکه فایل‌های bower.json  و package.json به صورت پیش فرض در ساختار پروژه قابل رویت نیستند، هر چند در مسیر پروژه وجود دارند! دلیل این امر هم این است که در این نسخه، رابط کاربری bower package manager برای مدیریت راحت‌تر ارائه شده است که همانند NuGet package manager یک user interface است که دسترسی و مدیریت راحت‌تر را برای کتابخانه‌های سمت کلاینت فراهم میکند و برای تغییر و به روزرسانی، استفاده از این روش توصیه می‌شود. جهت استفاده از این قابلیت، روی پروژه کلیک راست کرده و گزینه Manage Bower Packages را انتخاب نمایید. این user interface بسیار شبیه NuGet می‌باشد و داری قابلیت‌های خوبی از جمله مدیریت بسیار راحت و امکان جستجو می‌باشد.


نظرات نظرسنجی‌ها
با توجه به آخرین نگارش‌های موجود Angular و React، انتخاب شما برای انجام یک پروژه بزرگ کدام است؟
با سلام و وقت بخیر
عموما برای انتخاب یک فریمورک به چند نکته باید توجه داشت :
  1. محبوبیت و پرطرفداری در بازار کار ( سمت مشتری یا اذهان عمومی )
  2. تعداد افراد و نیروی کار و در دسترس بودن آنها
  3. راحتی راه اندازی و پشتیبانی در توسعه
  4. قابلیت‌های رقابتی فریمورک
به زبان ساده موارد بالا را میتوان اینگونه بیان کرد که وقتی شما میخواهید یک پروژه را شروع کنید هدفتان از انجام آن چیه ؟ مثلا اگر بخواهید در بازار به مشتریان یا به یک مشتری ارائه دهید React رو میتوان به سادگی براشون توجیح کرد. در توسعه و پشتیبانی هم برنامه نویسان سمت کاربر front براحتی در دسترس هستند برای سایر فریمورکها تعداد خیلی کمتر است. از طرفی قابلیتهای react به روزتر هست مثلا برای برنامه نویسی در PWA تمامی دسترسی به اثر انگشت و دوربین و ... براحتی قابلیت پیاده سازی است.
از طرفی شخصا به دلیل اینکه یک شرکت معتبر مثل فیسبوک از این فریمورک پشتیبانی میکند بهتر و معتبرتر از سایر فریمورک‌ها میدانم.
نظرات مطالب
ایجاد ویژگی‌های اعتبارسنجی سفارشی در ASP.NET Core 3.1 به همراه اعتبارسنجی سمت کلاینت آن‌ها
ممنون بابت مطلب ارزشمندتون
به عنوان یک نکته تکمیلی:
کتابخانه  FoolProof.Core (مخزن آن) Attribute‌های زیادی برای بحث اعتبار سنجی دارد که همگی علاوه بر Server-side از Client-side Validation هم پشتیبانی میکنن. نسخه قدیمی آن (foolproof) برای ASP.NET MVC سابق است (قبلا مقاله آموزش آن در سایت ثبت شده)  ولی این نسخه از ASP.NET Core پیشتیبانی میکنه
لیست Attribute های پشتیبانی شده:
  • Is
  • EqualTo
  • NotEqualTo
  • GreaterThan
  • LessThan
  • GreaterThanOrEqualTo
  • LessThanOrEqualTo
  • Improved required validators:
  • RequiredIf
  • RequiredIfNot
  • RequiredIfTrue
  • RequiredIfFalse
  • RequiredIfEmpty
  • RequiredIfNotEmpty
  • RequiredIfRegExMatch
  • RequiredIfNotRegExMatch
  • In
  • NotIn 
نظرات مطالب
Gulp #2
تشکر بابت این مقاله. فقط یک نکته رو بیان کنم که فرمان touch  برای پلتفرم ویندوز نیست . اگر دستور :

touch gulpfile.js

رو صادر کنیم با خطای زیر رو به رو میشیم :
'touch' is not recognized as an internal or external command, operable program or batch file.
برای ایجاد فایل خالی در ویندوز باید اینکارو بکنیم :

echo $null >> gulpfile.js
این دستور همانند دستور touch هستش. با این دستور فایل gulpfile.js در مسیر پروژه ساخته میشه.
نظرات مطالب
کمی درباره دستورات using
یک نکته اضافه در مورد فایل class.cs در ابتدای مقاله.
مدتی هست که من هر موقع کلاسی به خصوص برای بخش مدل‌ها ایجاد میکنم مرتب هر کلاسی را باید یک public را بنویسم چون به طور پیش فرض کلاس هایی که دات نت ایجاد میکند private هستند.
برای حل این مشکل در فایل class عبارت public را قبل از کلمه class به آن اضافه کنید:

class $safeitemrootname$
    {
    }

========= To

public class $safeitemrootname$
    {
    }

احتمالا این معضل خیلی‌ها هست چون نوشتن تعداد کلاس‌های عمومی بیشتر از خصوصی است
نظرات مطالب
مدیریت سفارشی سطوح دسترسی کاربران در MVC
سه جدول user  و UserRoles و Roles در نظر گرفته شده که  جدول UserRoles  بین دو جدول دیگه واسط هست . هر کاربر میتونه چندین مجوز داشته باشه و هر مجوز میتونه برای چندین کاربر باشه . ارتباط n به n بین دو جدول Roles و user به واسطه‌ی جدول UserRoles برقراره. 
 
توجه به این نکته حائز اهمیته که این مدل فقط یک مثال ساده صرفا مربوط به این مقالست و هیچ جنبه‌ی دیگه ای نداره و همونطور که تو مقاله هم به صورت ضمنی اشاره شد به هر روش دیگه ای بسته به کارتون میشه پیاده سازیش کرد.
نظرات مطالب
رمزگذاری رویه‌های ذخیره شده در SQL Server
سلام
مرسی از مقاله شما، فقط نکته ای در مورد Stored Procedure‌های Encrypt شده وجود دارد، و آن این است که، این نوع Procedure‌ها را نمی‌توان بطور قابل فهم در Execution Plan مشاهده نمود.
مثال:
CREATE PROCEDURE #RegularSP
AS
SELECT TOP 10 City
FROM Person.Address
GO
اجرا با Execution Plan
EXEC #RegularSP
خروجی بصورت زیر خواهد بود:

ایجاد Stored Procedure بصورت Encrypt شده:
CREATE PROCEDURE #EncryptSP
WITH ENCRYPTION
AS
SELECT TOP 10 City
FROM Person.Address
اجرا با Execution Plan 
EXEC #EncryptSP
خروجی بصورت زیر خواهد بود: 

حذف Stored Procedure‌های ایجاد شده:
DROP PROCEDURE #RegularSP
DROP PROCEDURE #EncryptSP
 
نظرات مطالب
ASP.NET MVC #1
سلام تقریبا یک هفته ای میشه شروع کردم  مقاله شما انگیزه من رو برای یادگیری بیشتر کرد، فکر کنم هرکس با mvc کار کنه دیگه دوست نداشته باشه بره سمت وب فرم.
نکته ای که برای من خیلی جالبه وقتی با وب فرم کار می کنی  html جاوا جی کوئری مثل عقب مونده ها نگات می کنند و یه دایر دورت می کشن که از اون بیرون نری  ولی وقتی با mvc کاری می کنی احساس می کنی  دنیای وب رو در اختیار توست تا زیباترین و قویترین وب اپلیکیشن رو طراحی کنی !