این ترجمه ( با جرح و تعدیل ) یک مقاله قدیمی ( اما هنوز مفید و آموزنده ) از وب سایت Joel Spolsky به بهانه بیرون آمدن نسخه جدید netscape است :
یکی از بدترین اشتباهات یک برنامه نویس ، یک تیم نرم افزاری و یا شرکت نرم افزاری بزرگ در کسب و کارش این است که تصمیم بگیرد که کد را از پایه بازنویسی کند
NetScape ، Microsoft ، Borland نمونه هایی از شرکت های بزرگی هستند که در مقطعی این اشتباه را مرتکب شدند و به شدت ضربه خورده و سهم خود در بازار را کاملا یا به طور نسبی به رقیبان واگذار کردند .
ما برنامه نویس هستیم . برنامه نویس ها ، در باطن خود ، معمار هستند و اولین کاری که وقتی به یک زمین می رسند می کنند این است که آن را با بولدوزر صاف کنند و یک چیز عالی بسازند . ما با نوسازی تدریجی میانه ای نداریم و این چیزی نیست که ما را هیجان زده کند .
public
static
bool
IsValidCodeMelli(
this
string
codeMelli)
{
Int64 number;
int
sum = 0, temp;
Int64.TryParse(codeMelli,
out
number);
if
(Math.Log10(number) > 6 && Math.Log10(number) < 10)
{
temp = Convert.ToInt16(number % 10);
number /= 10;
for
(
int
i = 2; i < 11; i++)
{
sum += Convert.ToInt16(i * (number % 10));
number /= 10;
}
if
(((sum % 11 < 2) && (sum % 11 == temp)) ||
((sum % 11 >= 2) && ((11 - sum % 11) == temp)))
return
true
;
}
return
false
;
مثال:
قبلا در این پست درباره Extention Method ها و نحوه استفاده از آن مطالبی نوشته شد.
حال در این پست به نحوه استفاده از Extention Method در تبدیل حروف ی و ک عربی به فارسی در نرم افزار می پردازیم :
public static class Helper
}
(public static string FixPersianChars(this string Value
}
;(
'ی'
,
'ی'
)Replace.(
"ک"
,
"ک"
)
return Value.Replace
{
{
مثال :
;
"بابک کمائی" =
string txtLastName
;()string FixChars = txtLastName.FixPersianCharsشاید براتون پیش اومده باشه که تا قبل از اینکه نرم افزارتون آماده بشه تا کلمات و حروف عربی رو به فارسی تبدیل و در دیتا بیس ذخیره کنه ، کاربرا کلی حروف عربی توی دیتا بیس زده باشن.
حالا ما اگر بخواهیم تمام حروف ی و ک عربی رو یه جدول دیتا بیس به حروف ی و ک فارسی تبدیل کنیم ، می تونیم از اسکریپت زیر استفاده کنیم.البته در این روش تمام جداول پایگاه داده به انضمام تمام فیلد های نوع متنی در نظر گرفته می شود و فقط کافیه جای dbName نام دیتا بیس خودتون رو قرار بدید.
Use [dbName]
DECLARE @Table NVARCHAR(MAX),@Column NVARCHAR(MAX)
DECLARE Table_Cursor CURSOR
FOR
--پیدا کردن تمام فیلدهای متنی تمام جداول دیتابیس جاری
SELECT T.name, /* Table */
C.name /* Column */
FROM sysobjects T,syscolumns C
WHERE T.id = C.id AND T.xtype = 'u' /* User Table */
AND (C.xtype = 99 /* ntext */
OR C.xtype = 35 /* text */
OR C.xtype = 231 /* nvarchar */
OR C.xtype = 167 /* varchar */
OR C.xtype = 175 /* char */
OR C.xtype = 239 /* nchar */)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Column
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC ('Update [' + @Table + '] Set [' + @Column + '] = REPLACE(REPLACE(CAST([' + @Column + '] as nvarchar(max)), NCHAR(1610), NCHAR(1740)), NCHAR(1603), NCHAR(1705))')
FETCH NEXT FROM Table_Cursor INTO @Table,@Column
END CLOSE Table_Cursor
DEALLOCATE Table_Cursor
HttpModule چیست:
در ASP.NET پردازش هر درخواست دارای مراحل یا فازهای مختلف است و در هر فاز رویدادهای مشخصی وجود دارد که با استفاده از HttpModuleها میتوانیم در این فرآیند تغییراتی ایجاد کنیم. به عنوان مثال می توانیم در اینجا عملیات لاگ کردن درخواستها، اعتبار سنجی درخواستها، بازنویسی Urlها و ... را به یک برنامه ASP.NET اضافه کنیم. برای مشاهده لیست این رویدادها و توضیحات بیشتر در این مورد اینجا را ببینید. در این مقاله برای سادگی بیشتر من فقط به دو تا از مهمترین رویدادها اشاره میکنم. این دو رویداد، BeginRequest (در لحظه دریافت درخواست توسط سرور) و EndRequest (پس از خاتمه پردازش درخواست توسط سرور) هستند و من در چند مثال موجود در این مقاله فقط از همین دو رویداد استفاده کرده ام.
ادامه مطلب ...