Wednesday, June 18, 2008

Custom Validation Summary Control එකක් ලිවීම.

හුඟ කාලෙකින් මුකුත් ලියන්න බැරි උනා නේ. Office එකේ රෑ වෙනකම් වැඩ තිබුණා මේ ටිකේ. අද මම ලියන්න හිතුවා office එකේ කරපු වැඩක් ගැන.

පහුගිය දවස් වල මම ලියුවා Custom Web Control එකක් ASP .NET ValidationSummary control එක extend කරලා. අපේ application එකේ තියෙනවා error messages, alerts එහෙම පෙන්නන තැනක් උඩින්, image එකක් එහෙම එක්ක. ඉතින් ඕකට අපිට ඕනේ උනා ASP .NET ValidationSummary එකේ වගේ validation errors list කරන්නත්, පිටතින් messages set කරන්නත් පුලුවන්, ඒ වගේම පෙන්නන message එක error එකක්ද, information එකක්ද එහෙම කියන එක මත පෙන්නන image එකත් style එකත් වෙනස් වෙන control එකක්.

මුලින්ම මම වැඩේ පටන් ගත්තේ ValidationSummary එක inherit කරලා ඒකට අපිට ඕනේ messages add කරන්න පුලුවන් විදිහට ඒක වෙනස් කරන එකෙන්. ඉතින් ඔය වැඩේ කරන්න දැනට ඒක කොහොමද validation errors ගන්නේ කියන එක හොයා ගන්න ඕනෙ නේ. ඒ වැඩේට තමයි මට Lutz Roeder ගේ .NET Reflector උවමනා උනේ. Reflector එකෙන් කරන්නේ IL එක de-assemble කරලා ආයෙත් code වගේ පෙන්නන එක. අපිට ඕනේ language එකක් එහෙමත් select කරගෙන බලන්න පුලුවන්.

ටිකක් බලද්දි තමයි මට තේරුනේ වැඩේ හිතපු තරම් ලේසි නෑ කියලා. මොකද, ඒකේ පාවිච්චි වෙන සමහර methods system.web assembly එකට internal. ඉතින් දෙය්යනේ එවා කොහොමද මම පාවිච්චි කරන්නේ? හැබැයි ඉතින් Reflector එකෙන් ඒ internal එවත් ඔක්කොම පේනවනේ. ඉතින් මම ඒ methods ටික ඔක්කොම ආයේ ලිව්වා මට ගැලපෙන විදිහට වෙනස් කර කර..

ඔහොම කොහොමින් කොහොමින් හරි යන්තම් server side code වලින් control එක මට ඕනේ විදිහට render කරන්න හදා ගත්තා. හබැයි ඉතින් ඕක run කරලා බලපුහම මට තේරුනා තවත් ලොකු ලෙඩක් තියෙනවා කියලා. මොකද ValidationSummary එකේ client rendering එක වෙන්නේ වෙනම javascript එකකින්. ඒක control එකෙන් register කරන එකකුත් නෙවෙයි. Page එකට දාන හැම Validator Control එකකින්ම include කරන js resource file එකක තියෙන එකක්. ඒ function එක call වෙන්නෙත් page submit එකේදි ඒකෙම තියන වෙන function එකකින්. ඒවා වෙනස් කරන්න ගියොත් මගේ control එක self-contained නැති වෙනවා නේ. ඉතින් මම google කර කර සෑහෙන වෙලාවක් හෙව්වා ඕකට විකල්පයක්. හම්බුනේම නෑ. ඒ පාර මම ඕනෙ දේකට කියලා අර නමින්ම javascript function එකක් ලියලා startup script එකක් විදිහට register කරා. මම හිතුවා වගේම වැඩේ හරි ගියා.

දැන් custom validation summary control එක බොහොම ලස්සනට වැඩ.

Monday, May 19, 2008

සිහි කල්පනාවෙන් code කිරීම

ASP .NET වලින් web development කරන එක ඉස්සර කාලේ කරාට වඩා වෙනස්. අලුතින් පටන් ගත්තු කෙනෙකුට හිතෙන්නේ windows forms වගේමයි කියලා. Classic ASP, PHP වගේ එවගෙන් කරන්නේ HTML generate කරන එක. ඒත් ASP .NET වල programming model එක ඊට වඩා වෙනස්. ඉතින් හුඟ දෙනෙක් හිතනවා මේකත් windows forms වගේ කියලා.

මේ කතාව කියන්න උනේ පහු ගිය දවස් ටිකේම මහ රෑ වෙනකම් මට කරන්න උනේ එහෙම අය ලියපු දේවල් සුද්ද කරන එක නිසයි. ASP .NET නොදන්නවට අමතරව අපි සාමාන්යයෙන් programming best practices කියලා කියන දේවල් පාවිච්චි නොකරන එකත් ලොකු ප්රශ්නයක්. මම දැන් මෙහෙම කිව්වට, මමත් ඔහොම කරපු කාලයක් තිබ්බා. Experience එක්ක තමයි ඕවා හැදෙන්නේ. හැබැයි අපි හැම වෙලේම කරන දේ සිහියෙන් කරන්න ඕනේ. Improve කරන්න පුලුවන් ද කියලා හොයන්න ඕනේ.

බොහොම සරල දේවල් තමයි re-usability එහෙම. එකම දේ හුඟ පාරක් ලියන්න වෙනවා නම් ඒ දේ abstract කරලා වෙනම method එකකට දාන්න එහෙම පුරුදු වෙන්න ඕනෙ. classes ගොඩක් එකම විදිහට වැඩ කරනවා නම් ඒවාගේ common දේවල් base class එකකට දාන්න පුලුවන් ද කියලා බලන්න ඕනේ. මේවා design වැඩ නෙවෙයි. Programming best practices.

අනික් ප්රධානම දේ තමයි business logic, UI එකෙන් වෙන් කරන්න පුරුදු වෙන්න ඕනේ. ASP .NET code behind එකක හරි windows form එකක හරි කවදාවත් UI එකට අදාල දේ හැර වෙන code ලියන්න එපා. ඒවා වෙනම class වල ලියන්න. Code behind එකේ form class එකේ තියෙන්න ඕනේ field validation වගේ එවා විතරමයි. එහෙම කරාම code base එක maintain කරන්න පහසුයි.

Application එකට development guidelines හදලා තියෙනවා නම්, ඒක බොහොම පරිස්සමින් follow කරන්න. ඒකෙන් පිට යනවා නම් ඒකට සාධාරණ හේතුවක් තියෙනවද කියලා හැමෝම එකතු වෙලා තීරණය කරන්න.

පාවිච්චි කරන technology එක මොකක් උනත් අද මම මේ ලියපු දේවල් ඒ හැම එකකටම අදාල වෙනවා..

Tuesday, April 29, 2008

ObsoleteAttribute එකෙන් compiler errors generate කරන හැටි

අලුත් දෙයක් නොවුනත් ලියල තියන්න වටින දෙයක් තියෙනව අද ලියන්න.

අපි නිතර කරන දෙයක් නේ වෙන කවුරු හරි ලියපු class එකක් අරන් අපිට ඔනෙ විදිහට වෙනස් කර ගන්න එක. ඉතින් ඔය වගේ අපි .NET Framework එකේ ඒවත් extend කර ගන්නව නේ. එහෙම වෙලාවට අපිට ඕනේ වෙනව නෙ එකේ තියෙන සමහර එවා පාවිච්චි කරන එක නවත්තන්න. වෙන කවුරුත් ලියපු එකක් නිසා අපිට ඒක වෙනස් කරන්න අයිතියකුත් නෑ නෙ. ඒ වගේ වෙලාවට කරන්න පුලුවන් වැඩක් තමයි මේ.

ObsoleteAttribute එක හුඟ දෙනෙක් පාවිච්චි කරාට ඕකේ constructor එකේ දෙවෙනි parameter එක පාවිච්චි වෙන්නේ කලාතුරකින්. ඒක true කරලා තිබ්බොත්, අපේ class එක පාවිච්චි කරන අය ඒක පාවිච්චි කරල compile කරන්න ගියොත් compiler error එකක් දෙනවා. එහෙම නැත්තම් පෙන්නන්නේ warning එකක් විතරයි.

උදා:

[Obsolete("Access of this.Session", true)]
public override System.Web.SessionState.HttpSessionState Session

Sunday, April 27, 2008

පූර්විකාව

ඔන්න ඉතින් මම අලුතින් වැඩක් පටන් ගන්න කියලයි හදන්නෙ. මම හෙට ඉඳලා අලුත් Project එකක වැඩ පටන් ගන්නවා. අපේ කොම්පැණියේ හැටියට බොහොම කලාතුරකින් හම්බෙන chance එකක්. .NET 3.5 වලින් කරන එකක්. තාම BETA stage එකටවත් ඇවිත් නැති ASP .NET MVC frmework එකත් පාවිච්චි කරනවා. ඉතින් මම හිතුවා ඕකේ මට අලුතින් ඉගෙන ගන්න හම්බෙන දේවල් ලියලා තියන්න. ඉතින් මේ වෙද්දී ඔවා ඉන්ගිරීසියෙන් ඕනෙ තරම් ලියවිලා තියෙන නිසා මම හිතුවා කතා කරන සිංහලෙන්ම මේක ලියන්න. එතකොට අඩුම තරමේ තව එක්කෙනෙකුට වත් ප්රයෝජනයක් වෙයි නේ කියලා.

එහෙම නම්... ආයුබෝ වේවා...