ASP.NET Forms Model یا ASP.NET MVC Model


بسیاری از دوستان برنامه‌نویس به‌خصوص کسانی که برنامه‌نویسی را با تولید برنامه‌های تحت ویندوز آغاز کرده‌اند، در انتخاب یکی از دو مدل ASP.NET Forms و ASP.NET MVC مردد هستند. پیشنهاد می‌کنم به دو لینکی که در انتهای این پست قرار داده‌ام مراجعه نمایید. خوشحال می‌شوم اگر از طریق کامنت‌های این پست با هم تبادل نظر و پرسش‌و پاسخ داشته باشیم.

ASP.NET Forms Model or ASP.NET MVC Model

Many developers specially the ones coming from “Windows Development” are confused to choose ASP.NET Forms or ASP.NET MVC!
I suggest you to check out these links. They will probably be helpful.

معرفی چند منبع

همه می‌دانیم که با یک جستجوی ساده می‌توان منابع متعددی در انواع زمینه‌های برنامه‌نویسی به‌دست آورد، با این حال با توجه به درخواست دوستانی که با آنها کلاس دارم در این یادداشت به معرفی چند منبع در زمینه‌های درخواست شده که به نظرم مفید می‌آیند می‌پردازم

سایت cplusplus یکی از پایگاه‌های اطلاع رسانی محبوب در زمینه C plus plus می‌باشد، این سایت خود آموزی برای مفاهیم عمومی برنامه‌نویسی و برنامه‌نویسی شی گرا آماده کرده که از طریق آدرس زیر در دسترس است:



دوستانی که علاقه‌مند هستند با معماری چندلایه‌ای و نمونه پیاده سازی شده آن آشنا شوند می‌توانند از پایگاه اطلاع رسانی csharpcourses استفاده کنند که درواقع یک وبلاگ نسبتا پرطرفداردر زمینه C sharp است که توسط یکی از هموطنانمان راه‌اندازی شده است، مطلب مربوط به معماری چندلایه‌ای را می‌توانید از طریق آدرس زیر مطالعه بفرمایید:


دوستانی که علاقه‌مند به استفاده از خودآموز و یا بسته‌های آماده سازی برای امتحان‌های Microsoft در زمینه تولید نرم‌افزار‌های تحت Web و Windows توسط C sharp هستند می‌توانند از بسته‌های سایت cbtnuggets استفاده کنند که البته رایگان نیستند ولی باتوجه به عدم التزام به رعایت قانون حقوق مولف در قبال نرم‌افزارهای خارجی فایلهای Torrent این بسته‌ها را در اینجا معرفی می‌کنم تا بدینوسیله آنها را Download نموده و مشت محکمی به دهان استکبار بکوبید:

بسته مربوط به نرم‌افزارهای تحت Windows:

بسته مربوط به نرم‌افزارهای تحت Web:

امیدوارم که این منابع برای شما مفید واقع شوند

MSF و Software Architecture


چند سال پیش، من یک presentation در مورد Microsoft Solutions Framework و Software Architecture یا همان معماری نرم‌افزار آماده کرده بودم و آن را به صورت نصفه و نیمه در محل کارم ارائه دادم، شاید این Slide Show برای کسانی که مایل هستند با این دو مقوله آشنایی پیدا کنند بد نباشد، از طریق آدرس زیر می‌توانید این Presentation را مشاهده و یا Download نمایید

مشکلات حروف فارسی چندگانه


  
برخی از حروف فارسی به چند شکل و به اصطلاح بر اسا Character Set های مختلف نوشته می‌شوند
مثلا:
"ک" و "ك"
"ی" و "ي"
که در اصل شکل‌های دوم عربی هستند
حالا اگر در پایگاه داده‌های شما هردو "ک" و هردو "ی" ذخیره شده باشند باید چه‌کار کرد؟
مثلا شما می‌خواهید یک Select بنویسید که تمام کسانی که نام آنها "بابک" است را برای شما بیاورد
دو نفر با نام بابک در جدول شما ذخیره شده‌اند یکی با "ک" و دیگری با "ك"
یک روش این است که دو شرط برای Select بگذارید که هردو بابک را چک کند، ولی اگر متنی که در حال جستجوی آن هستید طولانی باشد چه؟ اصلا اگر در متن شما هم "ک" وجود داشت و هم "ی" چه؟ یعنی باید ترکیب تمام حالات مختلف را در شرطتان اعمال کنید؟
در واقع اگر مجبور باشید باید این کار را بکنید ولی به‌جای نوشتن تمام متن در حالات مختلف می‌توانید توابعی بنویسید که این کار را برای شما انجام بدهند، این کدی‌است که من از آن استفاده می‌کردم:

  string MakeitFarsi(string NetString)
    {
        NetString = NetString.Replace((char)1705, (char)1603);
        return NetString.Replace((char)1740, (char)1610);

    }

این تابع کارکترهای عربی را با نظایر فارسی آنها معاوضه می‌کند

می‌توانید سه تابع دیگر هم برای جستجوی کارکترهای عربی و ترکیب آنها بنویسید، ولی پیشنهاد من این است که هنگام data entry یعنی وقتی که در حال ثبت اطلاعات در پایگاه داده‌ها هستید آنها را استاندارد سازی کنید، مثلا همه کارکترهای عربی را در آنها فارسی کنید و هنگام انجام جستجو فقط به‌دنبال کارکترهای فارسی بگردید، به‌این ترتیب یک تابع مثل تابع فوق کفایت می‌کند، البته با این شرط که همانطور که گفتم، یک بار هنگام ثبت اطلاعات از آن استفاده کنید و یک بار هم هنگام بازیابی.

Hashing و Encryption




Hashing و Encryption هردو روشهایی برای رمزنگاری هستند، نکته قابل توجه این است که هنگامی که متنی را Hash می‌کنید دیگر روش ساده‌ای تحت عنوان dehash کردن آن وجود ندارد و شما برای اینکه متنی را با آن مقایسه بکنید مجبورید آن متن را با همان شیوه Hash کنید و سپس با متن hash شده مقایسه نمایید، در صورتی که یک متن Encrypt شده را می‌توانید Decrypt کرده و با یک متن دیگر مقایسه کنید.

احتمالا می‌دانید که روشهای Encryption مختلفی وجود دارند، در اینجا من کدی را که سالها پیش با استفاده از الگوریتم SHA و با VB.NET نوشته بودم در اختیارتان می‌گذارم:

Imports System.Security.Cryptography
Imports System.Text
.
.
.
 Public Function GetEncryptedData(ByVal Data As String) As String

        Dim shaM As New SHA1Managed
        Convert.ToBase64String(shaM.ComputeHash(Encoding.ASCII.GetBytes(Data)))
        Dim eNC_data() As Byte = ASCIIEncoding.ASCII.GetBytes(Data)
        Dim eNC_str As String = Convert.ToBase64String(eNC_data)

        Return eNC_str

    End Function

    Public Function GetDecryptedData(ByVal Data As String) As String

        Dim dEC_data() As Byte = Convert.FromBase64String(Data)
        Dim dEC_Str As String = ASCIIEncoding.ASCII.GetString(dEC_data)
        Return dEC_Str

    End Function

همانطور که ملاحظه کردید دو تابع به منظور Encrypt مردن و Decrypt کردن در کد فوق نوشته شده‌است.

در مورد Hashing که معمولا برای نگهداری passeord ها استفاده می‌شود یکی از روشها استفاده از System.Web.Security است:

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPwd.Text, "MD5").ToString()

همانطور که ملاحظه کردید من از MD5 به عنوانت فرمت Hashing استفاده کردم

کار با Directory Services



اضافه کردن و یا حذف کردن یک User در یک Domain
اضافه کردن و یا حذف کردن یک Group در یک Domain
اضافه کردن و یا حذف کردن یک User در یک Group
اینها کارهای مدیریتی هستند که یک Network Administrator معمولا انجام می‌دهد، ولی اگر قرار باشد که این کارها از طریق نرم‌افزار شما انجام شود چه؟
در لینک زیر نمونه کدهایی که من سالها پیش به این منظور نوشته‌ام را پیدا می‌کنید، البته ممکن است که روش اجرای این کد کمی قدیمی شده باشد، این کد برای .NET Framework 1.1 و با VB.NET نوشته شده است.

Binding در Template Field


  
همانطور که می‌دانید ما به اشیای درون Template Field ها در کد، دسترسی مستقیم نداریم، شما به راحتی می‌توانید Bound Column به یک GridView اضافه کنید ولی اگر Template Field و یا به قول قدیمی‌تر ها Template Column داشته باشید و بخواهید اشیای موجود در آن را (مثلا متن یک Lable) را Bind کنید باید چه کار کرد؟

پاسخ، تابع Eval است، فرض ما این است که شما قبلا به خود Gridview یک Data source داده‌اید و حالا مشکل فقط نمایش Record های آن در اشیای مورد نظر شما است، در حقیقت Container شما دارای Datasource می‌باشد و کافیست که شما از طریق تابع Eval به فیلدهای آن دسترسی پیدا کنید.

شی DataBinder این تابع را در اختیار ما می‌گذارد:
DataBinder.Eval(container, "dataitem.Title")
در مثال فوق، شما به جای Title نام فیلد مورد نظر خود را خواهید گذاشت.

البته این کار را به این راحتی هم می‌توانید انجام دهید:
Eval(“Title”)
حالا این کد باید کجا نوشته بشود؟
کافیست که در محیط Edit Templates، روی شی مورد نظر کلیک کرده و Edit Bindings را برای آن انتخاب کنید، حالا با انتخاب Property مورد نظر و گزینه Custom binding  برای آن می‌توانید Code Expression مورد نظر را (Eval(“FieldName”)) برای آن بنویسید.