نظرات مطالب
ایجاد یک DbContext مشترک بین entityهای پروژه‌های متفاوت
روش بهتر ! 
ترجیح میدم سوالتون و با پروژهای مشابهی که کار کردم جواب بدم 
چند سال قبل بر روی سیستمی کار می‌کردیم که قرار بود با توجه به درخواست کاربر  دامنه ای رو یک Registerrer خاص ثبت، تمدید، منتقل، حذف و ... کنه 
چون قرار بود سیستم با امکانات اولیه فروخته بشه  و در صورت خرید پلاگین ها، بقیه امکانات اضافه بشه،
این قسمت به این صورت کار شده بود که در زمان انجام هر عملی لیست Registerrer ها می‌اومد که هر کدومشون توسط پلاگینشون‌نصب شده بودند و می‌تونستن کارهای ذکر شدرو انجام بدن
برای پیاده سازی چنین قابلیتی یک interface کلی وجود داشت که وظایف کلی Registerrer ها رو مشخص می‌کرد
بعد هر پلاگینی که اضافه میشد می‌دونستیم چه کارهایی می‌تونه انجام بده و بعدش با رفلکشن و cast کردن کلاس اصلی هر پلاگین به interface ، به متدهای مورد نظر دسترسی داشتیم . 
خوب تا اینجا شاید واقعا به یک سیستم pluggable نرسیدیم که شاید بگیم عیب دات نته 
اجازه بدید یه مثال از php  بزنم 
یه پروژه  php برای pluggable شدن فقط نیاز داره تا یکسری فایل .php رو در مسیر خاصی در روت اصلی قرار بدیم و ادرسشون و فراخوانی کنیم . کار تمومه و به سیستم  pluggable رسیدیم 
که برای کامل شدن این مثال بهتره که plugin‌ها به صورت فایل zip نصب بشن که در نهایت همون کپی کردن فایل‌های .php در جاهای مختلف پروژه می‌تونه باشه
اما تو دات نت یه خورده این کار سخت هست 
پروژه ای که در حال حاضر کار می‌کنم تقریبا یه سیستم pluggableکامل هست البته از دید من 
به این صورته که هر برنامه نویسی برای سیستمش سه پروژه 
UI 
Common  
Business  داره 
به عنوان مثال
Accounting.UI 
Accounting.Common  
Accounting.Business
و پروژه ای دیگر 
Store.UI 
Store.Common  
Store.Business
و ....
که تمام resource‌ها embeded میشن که با build کردن در فایل‌های  dll ذخیره میشن 
در اجرای اولیه ، کل UI  هایی که resource ی به صورت  embeded دارن لیست میشن و در  زمان درخواست هر صفحه از virtualPathProvider  استفاده می‌کنم تا بتونم اون  resource و از dll مربوطه بخونم و به کاربر نمایش بدم 
در ادامه هر پروژه میتونه ساختار یکسانی برای تعریف منوهایی داشته باشه که قراره به منوی اصلی اضافه بشن. 
که در چنین پروژه ای باید یکسری قوانین رو برای ساختار پروژه‌ها برای برنامه نویس‌ها مشخص کنید که طبق اونها پیش برن.
کار تمومه
حالا هر چندتا پروژه‌ی مشابه با ساختار مشخص شده به پوشه‌ی  bin  اضافه بشن، میتونن یه plug in باشن که به سیستم اضافه میشن 
پاسخ به بازخورد‌های پروژه‌ها
درخواست مستندات
هدف از انجام این است که کاربر(End User) بتواند گزارش‌های مورد نظر خود را ساخته، فایل xml تولید شده را به برنامه بدهد و برنامه مطابق فایل xml  و تگ‌ها گزارش را ساخته و به کاربر نمایش دهد.
در غیر اینصورت کاربر باید به ازای هر گزارش به برنامه نویس آن سفارش دهد تا گزارش مدنظر برای وی ساخته شود و به برنامه اضافه گردد.
یا حتی برای تغییر کوچکی در گزارش‌های برنامه : 
به عنوان مثال تغییر در سبک نمایش فاکتور فروش (هنگام چاپ)
هدف حذف این کارهای اضافه است که بعضا توسط کاربر برنامه نیز قابل اجراست. 
نظرات مطالب
افزودن تصدیق ایمیل به ASP.NET Identity در MVC 5
Portal بیشتر یک واسطه و یک لایه مخفی ساز کار با مباحث ارسال ایمیل است. این موارد را بهتر است بررسی کنید:
«چگونه بررسی کنیم smtp server مورد نظر ما کار می‌کند؟»
«تنظیمات امنیتی SMTP Server متعلق به IIS 6.0 جهت قرارگیری بر روی اینترنت»
برای آزمایش‌های محلی:
«شبیه سازی ارسال ایمیل در ASP.Net» 
« شبیه ساز میل سرور برای برنامه نویس‌ها»  
نظرات مطالب
آشنایی با NHibernate - قسمت هفتم
سیستم NHibernate از روز اول آن Code first بوده. EF هم در نگارش آخر آن به این نتیجه رسیده که روش Code first انعطاف پذیری بیشتری داره و دقیقا چیزی هست که برنامه نویس‌ها با آن راحت‌تر هستند.
البته برای NH یک سری ابزار تجاری توسط شرکت‌های ثالث درست شده که طراح دارد ولی ... فکر نمی‌کنم با استقبال مواجه شده باشد چون روش Code first یعنی رها شدن از انبوهی کد که توسط ابزارها نوشته می‌شن و عموما هم بهینه نیستند.
نظرات مطالب
مشکلات نصب به روز رسانی‌های اخیر
به روز رسانی‌های سیلورلایت دو نسخه دارند. یکی مخصوص کاربران نهایی، یکی هم مخصوص برنامه نویس‌ها. حجم این‌ها هم متفاوت است:
Silverlight Developer Run time
همچنین اخبار مرتبط با نگارش‌های متفاوت سیلورلایت همیشه اینجا هست:
release history

پس از این به روز رسانی، این شماره‌ جدید باید در فایل‌های aspx و html ایی که object مربوط به سیلورلایت را اضافه کرده‌اند هم به روز شوند.
نظرات اشتراک‌ها
ویروس مخصوص سیستم های مالی با دیتابیس SQL Server
این روش متداولی است که اکثر برنامه نویس‌های ایرانی رعایت می‌کنند. برنامه‌‌های مدت داری که اگر هزینه برنامه و حق و حقوق برنامه نویس در طی مدت مشخصی پرداخت شد، کار می‌کنند یا اگر نه ... قسمت‌های اصلی سیستم حذف خواهند شد.
نه ربطی به ویندوز یا SQL Server داره، نه مسایل سیاسی و نه به شرق و غرب عالم! روشی است بومی، جهت استیفای حق و حقوق!
بازخوردهای دوره
بررسی مقدماتی مراحل کامپایل یک قطعه کد سی‌شارپ و آشنایی با OpCodes
سلام جناب نصیری
ممنون. این تیپ مقالات خیلی جذابند و البته عمق خوبی به بینش برنامه نویس می‌دهد .
یک سوال
یادم هست در فروم برنامه نویس چشمم به مطلب خورده که نوشته بود امکان دارد که کدهای دات نت تبدیل به کدهای ماشین کرد که دیگر نیازی به نصب دات نت فریم ورک بر روی سیستم مقصد نباشد
یعنی میتوان تمام نیازمندیهای برنامه را از دل فریم ورک بیرون کشید و به برنامه اضافه کرد و در نهایت یک فایل اجرایی قبال اجرا بدون نیاز به فریم

ممکنه توضیح بدهید در این خصوص؟
ممنون  و متشکرم.
نظرات مطالب
اجرای وظایف زمان بندی شده با Quartz.NET - قسمت دوم
سلام من تازه برنامه نویسی asp رو شروع کردم. در سایتی که در حال طراحی آن هستم یک مدیر سیستم دارم و یک سری مشتری که هرکدام نام کاربری و پسورد خودشان را دارند. می‌خواهم برنامه ام به گونه ای باشد که هرروز به طور خودکار بررسی کند اگر تولد یک مشتری است به او اس ام اس دهد یا اگر قرارداد مشتری در حال اتمام است به او اس ام اس دهد و به اطلاعش برساند. من برای این کار یک برنامه کوارتز نوشته ام ولی مشکلی که دارم این است که نمی‌دونم این برنامه را از کجا صدا بزنم. نمی‌تونم هر مشتری که لاگین می‌شود این برنامه رو صدا بزنم. چون ممکن است در طول روز مشتری چندین دفعه لاگین شود. می‌خواهم به گونه ای باشد که دفعه اول که مدیر سیستم وارد سایت شد همون بار اول جاب فراخوانی شود و تا بی نهایت ادامه یابد.جاب را به گونه ای تنظیم کرده ام که روزی یک بار اجرا می‌شود. اگر جاب را همون دفعه اولی که مدیر سیستم وارد می‌شود صدا بزنم درست است؟ بعد از اینکه مدیر سیستم صفحه اش را می‌بندد اجرای برنامه متوقف می‌شود یا ادامه می‌یابد؟
نظرات مطالب
چند نکته اضافه برای Refactoring
در مورد نوشتن کدهای تمیزتر یه مورد دیگه ای هست که کمتر رعایت میشه. اونم درگیر کردن کدهای هدف یک تابع در شرط‌ها و بلوک‌ها می‌باشد. متدی را در نظر بگیرید که برای انجام دادن کار اصلی خودش باید برقرار بودن چندشرط رو بررسی کند. روند معمول نوشتن if تو در تو است.
public bool SaveTextF(string path)
{
    if (_isTextChanged)
    {
        if (string.IsNullOrWhiteSpace(path))
        {
            using (var dlg = new SaveFileDialog {Filter = "*.txt"})
            {
                if (dlg.ShowDialog() == DialogResult.OK)
                    path = dlg.FileName;
                else
                    return false;
            }
        }

        //call save methods on path
    }
    return true;
}
ولی با کمی اصلاح می‌تواند کار اصلی متد (در اینجا ذخیره کردن) را در بالاترین بلوک (بلوک تابع) نوشت:
public bool SaveTextT(string path)
{
    if (!_isTextChanged) return true;
    if (string.IsNullOrWhiteSpace(path))
        using (var dlg = new SaveFileDialog {Filter = "*.txt"})
        {
            if (dlg.ShowDialog() != DialogResult.OK) return false;
            path = dlg.FileName;
        }
    //call save methods on path
    return true;
}
با معکوس سازی شروط به کدی تمیزتر خواهیم رسید. invert if توسط افزونه resharper در ویژوال استادیو به برنامه نویس گوشزد میشود ولی همیشه بهترین گزینه را عنوان نمیکند.
نظرات مطالب
طبقه بندی Bad Code Smell ها
اگر if ، switch  ربطی به یک زبان شیءگرا نداشتند، اصلا در آن قرار نمی‌گرفتند. اگر میزان پیچیدگی یک برنامه افزایش پیدا کند، قطعا نگهداری آن مشکل‌تر خواهد شد. درک آن توسط سایر اعضایی که آن کد را ننوشته‌اند مشکل‌تر خواهد شد. همچنین نیاز به مستندات بیشتری خواهد داشت.
استفاده از switch یعنی طراحی دقیق برنامه. یعنی حالت‌های مختلف مورد استفاده مشخص هستند و تفکری در پشت طراحی یک برنامه وجود داشته. اما زمانی هست که می‌خواهید به استفاده کننده‌ی از یک API امکان مانور بیشتری را بدهید تا بتواند قطعاتی را به برنامه متصل کند. در این حالت بهتر است از الگوی استراتژی بجای استفاده از روش‌هایی که تقریبا در هیچ پروژه‌ی مطرحی استفاده نمی‌شود، کمک گرفت. بنابراین باید دقت داشت که آیا ما درحال طراحی یک قطعه کد برای عموم هستیم یا یک برنامه‌ی مشخص با طراحی کاملا دقیق.