بازخوردهای پروژه‌ها
مفهوم late binding
سلام دوستان. من با این مفهوم در یک کتاب refrence مربوط به dependency injection اشنا شدم
خیلی جست و جو کردم ولی خوب مفهوم رو درک نکردم اگر امکان داره مطلبی در موردش همراه با یک مثال
کاربردی بزنید
اجرتون با خدا
مطالب
چگونه نرم افزارهای تحت وب سریعتری داشته باشیم؟ قسمت اول
در این سلسله مقالات قصد دارم چندین مطلب راجع به افزایش سرعت نرم افزارهای تحت وب مطرح نمایم. این مطالب هرچند بسیار مختصر می‌باشند ولی در کارایی و سرعت برنامه‌های شما در آینده تاثیر خواهند داشت.
1.کش کردن همیشه آخرین حربه می‌باشد
این مهم است که بخش‌های مختلف سایت شما در سطوح مختلف کش شوند (ASP.NET, Kernel, Server, Proxy Server, Browser ,...) ولی این موضوع باید همیشه آخرین حربه و نکته ای باشد که آن را در مورد سایت خود اعمال می‌کنید.
یعنی همیشه مطمئن شوید ابتدا تمامی نکات مربوط به افزایش کارایی در برنامه خود را رعایت کرده اید، سپس اقدام به کش داده‌ها در سطوح مختلف نمایید. توجه کنید کش کردن داده‌ها و صفحات می‌تواند مشکلات را برای شما به عنوان یک برنامه نویس یا تست کننده برنامه پنهان کند و به شما اطمینان دهد که همه چیز خوب کار می‌کند در حالی که این چنین نیست!
البته ذکر این نکته هم بی فایده نیست که کش کردن همه چیز بعضی مواقع دشمن برنامه شما محسوب می‌شود! هیچ وقت یادم نمی‌رود، در پورتال داخلی یک شرکت که در وقت استراحت به کارکنان اجازه مطالعه روزنامه‌های روز را می‌داد (به صورت آفلاین)، این نکته در بالای صفحه آورده شده بود: «لطفا برای به روز رساندن صفحات روزنامه‌ها از کلید Ctrl+F5 استفاده نمایید». این موضوع یعنی بحث کشینگ در برنامه آن پرتال در سطح فاجعه می‌باشد! حالا فرض کنید این مشکل در فرم ورود و یا مرور اطلاعات یک برنامه به وجود آید...
2.حذف View Engine‌های غیر ضروری
به عنوان یک برنامه نویس ASP.NET MVC، یابد اطلاع داشته باشید که CLR به صورت خودکار View Engine‌های Razor و Web Forms را لود می‌کند. این موضوع به این دلیل است که اطلاعی از نحوه برنامه نویسی شما ندارد. اگر شما فقط از یکی از این دو View Engine استفاده می‌کنید،لطفا دیگری را غیر فعال کنید! فعال بودن هر دوی آنها یعنی اتلاف وقت گرانبهای CPU سرور شما برای رندر کردن تمامی صفحات شما توسط دو انجین! ایتدا view‌های شما با Web Forms Engine رندر شده سپس نتیجه به  Razor Engine منتقل شده و مجدد توسط این انجین رندر می‌شود. این موضوع در سایت‌های با تعداد کاربر بالا یعنی فاجعه!
برای حل این مشکل کافی است خطوط زیر را در فایل Global.asax و در رویداد بخش Application_Start وارد نمایید:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
این دو خط یعنی خداحافظ Web Forms Engine...
قبل از استفاده از این کد، اطمینان حاصل کنید کل برنامه شما توسط Razor تهیه شده است وگرنه بنده هیچ مسئولیتی در رابطه با فریادهای کارفرمای شما متقبل نمی‌شوم!
صد البته برای حذف Razor Engine و استفاده از Web Form Engine می‌توان از کد زیر در همان موقعیت فوق استفاده کرد:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new WebFormViewEngine());
البته همانطور که حتما دوستان مطلع هستند امکان گسترش Engine‌های فوق توسط ارث بری از کلاس BuildManagerViewEngine جهت ایجاد Engine‌های دیگر همیشه محیا است. در این صورت می‌توانید تنها انجین سفارشی مورد نظر خود را لود کرده و از لود دیگر انجین‌ها پرهیز کنید. 
3. استفاده از فایل‌های PDB مایکروسافت برای دیباگ و یا پروفایل کردن DLL‌های دیگران  
دیباگ یا پروفایل کردن برنامه ها، DLL ها، اسمبلی‌ها و منابعی از برنامه که شما آن را خود ننوشته اید (سورس آنها در دسترس شما نمی‌باشد) همیشه یکی از سخت‌ترین مراحل کار می‌باشد. جهت کمک به دیباگر‌ها یا پروفایلرها، نیاز است فایل‌های PDB مرتبط با DLL‌ها را در اختیار آنها قرار دهید تا به بهترین نتیجه دسترسی پیدا کنید. این فایل‌ها محتوی نام توابع، شماره خطوط برنامه و metadata‌های دیگر برنامه اصلی قبل از optimize شدن توسط کامپایلر یا JIT می‌باشد.  خوب حالا اگر نیاز شد این کار را در رابطه با DLL‌ها و کلاس‌های پایه Microsoft.NET انجام دهیم چه کار کنیم؟
خیلی ساده! خود Microsoft سروری جهت این موضوع تدارک دیده که فایل‌های PDB را جهت دیباگ کردن در اختیار تیم‌های برنامه نویسی قرار می‌دهد.کافی است از منوی Tools گزینه Options را انتخاب، سپس به بخش Debugging و به بخش Symbols بروید و گزینه Microsoft Symbol Servers as your source for Symbols را انتخاب کنید. برای اطمینان از اینکه هر مرتبه که برنامه را دیباگ می‌کنید مجبور به دانلود این فایل‌ها نشوید، فراموش نکنید پوشه ای را جهت کش این فایل‌ها ایجاد و آدرس آن را در بخش Cache symbols in this directory همین صفحه وارد نمایید.
این امکان در Visual Studio 2010, 2012 در دسترس می‌باشد.
نظرات اشتراک‌ها
مقایسه‌ای بین امکانات Rider و Visual Studio
من هم مدت‌ها با VS کار کردم و اخیرا دارم با rider کار میکنم. بنظرم مواردی که گفتین کاملا محسوس و درسته. من با نسخه پیش نمایش vs2022 هم کار کرده بودم اما برای کسایی که ممکنه یه جاهایی حس کنن چرا مایکروسافت فلان امکان رو برای راحتی یا سرعت توسعه برنامه نویس نذاشته به شدت rider رو پیشنهاد میکنم. اگر بخوام جور دیگه بگم میشه گفت کسایی که تا حالا تو vs از ریشارپر استفاده میکردن اگر میخوان لذت بیشتری از این محصول ببرن بهتره rider رو هم یه تستی بکنن 

مزایا vs نسبت به rider:
+ بروز بودن با آخرین نسخه و تکنولوژی‌های Microsoft
+ امکان استفاده از IntelliCode completions که با هوش مصنوعی پیشنهاد‌های جالبی رو میده!

مزایای rider نسبت به vs:
+ امکانات مختلف جهت تنظیم IDE و کد نویسی سریع تر
+ IDE روان‌تر و سریع‌تر به کمک ایندکس گذاری‌های رایدر

اشتراک‌ها
معرفی DevDocs
DevDocs مستندات API‌های متعددی را در یک اینترفیس سریع، منظم و قابل جستجو تلفیق می‌کند. چیزهایی که باید پیش از شروع بدانید:

  1. برای انتخاب مستندات خود Select documentation را در گوشه سمت چپ کلیک کنید
  2. لازم نیست حتما از ماوس خود استفاده کنید. به لیست کلیدهای میانبر مراجعه شود
  3. جستجوی سایت از fuzzy searching پشتیبانی می‌کند. مثلا جستجوی عبارت "bgcp" مطالب "background-clip" را جستجو می‌کند
  4. برای اینکه در مستندات خاصی جستجو کنید، نام یا مخفف آن را وارد کرده سپس Tab را فشار دهید
  5. برای جستجو از مرورگر خود هم می‌توانید استفاده کنید. پروتکل Open Search پشتیبانی می‌شود
  6. از طریق موبایل هم می‌توانید به این سایت دسترسی داشته باشید. افزونه ای هم برای کروم وجود دارد
  7. برای دریافت خبرنامه‌ها یا عضو شوید یا @DevDocs را در توییتر دنبال کنید
  8. DevDocs رایگان و متن باز است
برخی از مستندات موجود در DevDocs:
  • CSS
  • DOM
  • DOM Events
  • HTML
  • HTTP
  • JavaScript
همین! از برنامه نویسی لذت ببرید :)
معرفی DevDocs
نظرات مطالب
#Defensive Code in C - قسمت سوم
-طبق ساده‌ترین اصول برنامه نویسی و طراحی نرم افزار هر متد باید جهت انجام دادن فعالیت‌های خود  قبل از انجام عملیات داده‌های ورودی را Validate کند و در صورتی که دیتای ورودی با دیتای مورد انتظار سنخیتی نداشت خطای لازم را صادرکند.
-این مسئله باید بر روی متد هایی که بر روی داده‌ها اعمالی را انجام داده یا متد هایی که فرآیندهای بیزینسی را پیگیری می‌کنند انجام شود
-به نظر شما متدی که داده‌های مربوط به تنها  کاری که انجام می‌دهد را اعتبار سنجی کند، اصل SRP را نقض کرده است!؟
-شما می‌توانید در پروژه‌های اصلی کد‌های مربوط به اعتبار سنجی(اعتبارسنجی‌های استاندارد) را در قالب یک ساختار کلاس بندی شده یا بصورت Aspect در متد‌های خود استفاده کنید تا از تکرار کدها جلوگیری کنید.
- در بالا هم ذکر کردم که این متد فقط یک عمکرد بیزینسی را انجام می‌دهد، و قسمت مربوط به اعتبار سنجی داده‌های ورودی یک مسئولیت جدید محسوب نمی‌شود.
-اینکه پارامتر متد به صورت string در نظر گرفته شده اند به خاطر ذکر مثال می‌باشد، این مسئله هم کاملا بدیهی است که در نظرگرفتن این پارامتر بصورت decimal اعتبار سنجی‌های اضافی را از بین می‌برد.
نظرات مطالب
EF Code First #1
سلام آقای نصیری
ممنون بخاطر مطالب مفیدتون. EF یک ORM قوی هست ولی بعضی مواردش هست که به نظر بنده نوعی در حد این ORM نیست.که دو موردش رو در اینجا ذکر میکنم :
1) در برنامه های چند لایه اگر لایه ها بصورت پروژه های جداگانه در نظر گرفته شده باشند باید Connection String رو در لایه UI ، BL و DAL قرار داد که به نظر من از لحاظ امنیتی درست نیست. این بهتره که در UI ما اصلا ندونیم COnnection String چی هست. البته این مورد با کد نویسی قابل حل هست ولی در کل مناسب نیست
2) من در کی از پروژه های گروهی به این مسئله برخوردم. ما در قسمت DAL فلدرهای مختلف داشتیم و هر کسی در فلدر قسمتی که کار میکرد میخواست یک دیتا مدل داشته باشه. این کار باعث میشد که به تعداد دیتا مدلها ما Connection String داشته باشیم و اگر میخواستیم از یک Connection String استفاده کنیم اسم کلاسی که تولید میشد برای همه یکسان میبود (اما در Name Space های مختلف) .

به نظر من EF از لحاظ Connection String یک مقدار ضعف داره.تا نظر دوستان چه باشه. ممنون و موفق باشید
نظرات مطالب
خلاصه اشتراک‌های روز جمعه 6 آبان 1390
سلام جناب مهندس نصیری
ممنون از مطالب ارزندتون. من چند وقتی هست که دنبال یادگیری WPF و نوشتن پروژه هام بر اساس اون هستم اما مشکلی که دارم باهاش ارتباط برقرار نمیکنم. منظورم اینه که مثلا من وقتی از VB 6 به ویندوز فرم سوئیچ کردم شاید براحتی و در یک هفته راحت راه افتادم و کارهامو باهاش انجام دادم. حتی وفتی که برای برنامه نویسی وب از ASP.Net استفاده کردم حدود دو ماه طول کشید تا به سینتکسش و کنترلهاش آشنا بشم.اما در مورد WPF اینطور نیست هر چی میخونم و فیلم آموزشی میبینم بیشتر گیج میشم. یجوری همه چیز تو همه و اینکه در هر کنترل تعداد زیادی Attribute هست که هیچ tooltip و توضیحی براش نیست و باید بریم کلی سرچ کنیم. معماری MVVM هم برام ثقیله در حالی که زود به MVC آشنا شدم. میخواستم ببینم این اشکال از منه یا منابعی که مطالعه کردم.اگر شما منبعی رو میشناسید که خوب توضیح داده باشه ممنون میشم معرفی کنید.
نظرات مطالب
آموزش سیلورلایت 4 - قسمت‌های 21 تا 27
WCF RIA Services این امکان رو به شما می‌ده که به منطق پیاده سازی شده در سمت سرور در برنامه‌ی سمت کلاینت خودتون (یعنی همان برنامه سیلورلایت) به شکل شکیلی دسترسی داشته باشید. به این صورت دیگر نیازی نخواهد بود مدلی را سمت کاربر پیاده سازی کنید، اعتبار سنجی را این طرف هم مجددا اعمال کنید، هر بار که WCF Service تغییر کرد، در سمت کلاینت مجبور به به روز رسانی باشید و خیلی موارد دیگر. تمام این‌ها یکبار در سمت سرور پیاده سازی می‌شود و سپس توسط فریم ورک WCF RIA Services در سمت کلاینت قابل دسترسی خواهد بود.
بنابراین مدل قابل استفاده در سمت کلاینت هم از این سرویس سمت سرور دریافت می‌شود و جالب اینجا است که تمام مباحث مطلع سازی تغییرات خواص، اعتبار سنجی، نکات ریز binding و غیره در این مدل‌های WCF RIA Services به صورت خودکار گنجانده شده و بار کدنویسی شما بسیار کمتر می‌شود.
برای MVVM ، کنترل domain data source را با کد نویسی تولید می‌کنم تا بتونم در View Model استفاده کنم و از حالت متداول کشیدن و رها کردن این کنترل روی فرم که با اصول MVVM سازگار نیست به این صورت رها خواهم شد.