Controllerها به نوعی رابط بین View و Model هستند. ساده ترین محل برای قرار دادن کدهای تصمیم گیری (decision-making code) ، قرار دادن منطق تجاری و یا فراهم ساختن داده برای View مثل ایجاد یک لیست از Select List برای یک DropDownList میباشند. اما انجام این کارها به نرم افزار ما پیچیدگی تحمیل میکند. Controllerها باید در طول زمان توسعهی یک نرم افزار کم حجم و سبک باقی بمانند. در این مطلب بحث شد که یکی از اهداف استفاده از ASP.NET MVC نوشتن ن ...
در ادامه مثال سوم قسمت قبل، در مورد حذف کدهای تکراری توسط Action و Func، در این قسمت به یک مثال نسبتا پرکاربرد دیگر آن جهت ساده سازی try/catch/finally اشاره خواهد شد.
احتمالا هزاران بار در کدهای خود چنین قطعه کدی را تکرار کردهاید:
try {
// code
} catch(Exception ex) {
// do something
}
این مورد را نیز میتوان توسط Actionها کپسوله کرد و پیاده سازی قسمت بدنه try آنرا به ...
در قسمت قبل از Func و Actionها برای ساده سازی طراحیهای مبتنی بر اینترفیسهایی با یک متد استفاده کردیم. این مورد خصوصا در حالتهایی که قصد داریم به کاربر اجازهی فرمول نویسی بر روی اطلاعات موجود را بدهیم، بسیار مفید است.
مثال دوم) به استفاده کننده از API کتابخانه خود، اجازه فرمول نویسی بدهید
برای نمونه مثال ساده زیر را درنظر بگیرید که در آن قرار است یک سری عدد که از منبع دادهای دریافت شدهان ...
delegateها، نوعهایی هستند که ارجاعی را به یک متد دارند؛ بسیار شبیه به function pointers در C و CPP هستند، اما برخلاف آنها، delegates شیءگرا بوده، به امضای متد اهمیت داده و همچنین کد مدیریت شده و امن به شمار میروند.
سیر تکاملی delegates را در مثال ساده زیر میتوان ملاحظه کرد:
using System;
namespace ActionFuncSamples
{
public delegate int AddMethodDelegate(int a);
public class DelegateSample
{
...
قسمتی از یک پروژه به همراه کلاس SqlHelper آن در کامنتهای مطلب «اهمیت Code review» توسط یکی از خوانندگان بلاگ جهت Code review مطرح شده که بهتر است در یک مطلب جدید و مجزا به آن پرداخته شود. قسمت مهم آن کلاس SqlHelper است و مابقی در اینجا ندید گرفته میشوند://It's only for code review purpose! using System.Data;using System.Data.SqlClient;using System.Web.Configuration;public sealed class SqlHelper{ private SqlHelper() { } // Sen ...
تا جایی که دقت کردم (در بلاگهایی که منتشر میشوند) در آنسوی آبها، «code review» یک شغل محسوب میشود. سازمانها، شرکتها و امثال آن از مشاورین یا برنامه نویسهایی با مطالعه بیشتر دعوت میکنند تا از کدهای آنها اشکالگیری کنند و بابت اینکار هم هزینه میکنند.اگر علاقمند باشید قسمتی از یک پروژه سورس باز دریافت شده از همین دور و اطراف را با هم مرور کنیم://It's only for code review purpose!protected void Button1_Click1(object sender, EventArgs ...
در بسیاری از زبانهای برنامه نویسی امکان null بودن Reference types وجود دارد. به همین جهت مرسوم است پیش از استفاده از آنها، بررسی شود آیا شیء مورد استفاده نال است یا خیر و سپس برای مثال متد یا خاصیت مرتبط با آن فراخوانی گردد؛ در غیر اینصورت برنامه با یک استثناء خاتمه خواهد یافت.مشکلی هم که با این نوع بررسیها وجود دارد این است که پس از مدتی کد موجود را تبدیل به مخزنی از انبوهی از if و else ها خواهند کرد که هم درجهی پیچیدگی متدها را افزای ...
یکی از مواردی که حین کار کردن با iTextSharp واقعا اعصاب خردکن است، طراحی نامناسب ثوابت این کتابخانه میباشد. برای مثال:public class PdfWriter{ /** A viewer preference */ public const int PageLayoutSinglePage = 1; /** A viewer preference */ public const int PageLayoutOneColumn = 2; /** A viewer preference */ public const int PageLayoutTwoColumnLeft = 4; /** A viewer preference */ publi ...
قبلا در مورد تبدیل switch statement به الگوی استراتژی مطلبی را در این سایت مطالعه کردهاید (^) و بیشتر مربوط است به حالتی که داخل هر یک از case های یک switch statement چندین و چند سطر کد و یا فراخوانی یک تابع وجود دارد. حالت سادهتری هم برای refactoring یک عبارت switch وجود دارد و آن هم زمانی است که هر case، تنها از یک سطر تشکیل میشود؛ مانند:namespace Refactoring.Day12.RefactoringSwitchStatement.Before{ public class Translator { ...
قسمت یازدهم آشنایی با Refactoring به توصیههایی جهت بالا بردن خوانایی تعاریف مرتبط با اعمال شرطی میپردازد.الف) شرطهای ترکیبی را کپسوله کنیدعموما حین تعریف شرطهای ترکیبی، هدف اصلی از تعریف آنها پشت انبوهی از && و || گم میشود و برای بیان مقصود، نیاز به نوشتن کامنت خواهند داشت. مانند:using System;namespace Refactoring.Day11.EncapsulateConditional.Before{ public class Element { private string[] Data { get; set; } ...