واسط کاربری
واسط کاربر[۱] (UI)
حتماً متوجه شدهاید که تا حالا هیچ صحبتی از UI نکردهایم. این امر به این خاطر بوده که دامنه مستقل از لایه ارائه به کاربر[۲] است. این دامنه میتواند برای پیادهسازی یک وبسایت، یک برنامه تحت ویندوز یا حتی یک سرویس ویندوزی مورد استفاده قرار گیرد. بدترین کاری که بخواهید انجام دهید قاطیکردن لایه UI و منطق دامنه است. این کار نه تنها کدهایی تولید میکند که هم تغییرشان سخت است و هم تستشان، بلکه باعث میشود نتوانیم از منطق موجود در آن در دیگر UIها استفاده مجدد نماییم (که ممکن است مساله مهمی نباشد اما به هر حال کاهش خوانایی و پایین امدن قابلیت نگهداری غیر قابل چشمپوشی است). این دقیقاً همان چیزی است که بسیاری از برنامهنویسان ASP.NET آن را انجام میدهند. من خیلی دیدهام که رفتار و منطق سیستم اشتباها در Page_Load یا رویدادClick دکمهها قرار گرفتهاند. موتور ASP.NET برای پیادهسازی واسط کاربری ASP.NET ساخته شده، نه پیادهسازی رفتار و منطق سیستم. رویدادClick دکمه Save نباید برای بررسی صحت قوانین پیچیده منطق برنامه (و حتی بدتر از ان، دسترسی مستقیم به پایگاه داده) مورد استفاده قرار گیرد، بلکه باید ASP.NET را بر اساس نتایج دریافت شده از لایه دامنه تغییر دهد. این کار میتواند شامل redirect به یک صفحه دیگر، نمایش پیغام خطا یا درخواست اطلاعات تکمیلی از کاربر باشد.
به یاد داشته باشید که میخواهید کدتان انسجام داشته باشد. منطق ASP.NET باید فقط روی یک چیز تمرکز داشته باشد و آن یک چیز را خیلی خوب انجام دهد. شک دارم که کسی مخالف این موضوع باشد که آن یک چیز باید مدیریت صفحه باشد، نه عملیات مربوط به دامنه. علاوه بر این منطقی که در codebehind قرار گیرد عموما اصل DRY را زیر پا میگذارد، چون استفاده مجدد از کدی که در فایل aspx.cs قرار دارد خیلی سخت است.
دیگر نمیتوان بیش از این منتظر شروع کار روی UI بود. نخست این که میخواهیم بازخورد مشتری و کاربران را به طور مداوم و پیوسته دریافت کنیم. بعید میدانم که آنها با دیدن چند تا فایل cs و vb هیجانزده شوند. دومین موضوع این است که استفاده واقعی از لایه دامنه بعضی ضعفها را نمایان خواهد کرد. برای مثال طبیعت غیر متصل وب ممکن است به این معنی باشد که ما باید تغییراتی در دنیای OO خالص بدهیم تا سیستم کاربر پسندتری داشته باشیم. به عقیده شخصی من اینطور مشکلات را نمیتوان با آزمون واحد کشف کرد.
خوشحال خواهید شد اگر بدانید که ASP.NET و WinForms همان برخوردی را با کد دامنه محور دارند که با کلاسهای داده محور دارند. شما میتوانید به Collectionهای داتنت Bind کنید، از Sessionها و Cacheها به طور معمول استفاده کنید و از هر چیز دیگری که به آن عادت دارید استفاده کنید. جدا از هر چیز دیگری میتوان گفت که بخش UI کمترین تاثیر را در بحث ما دارد. البته طرفداران ALT.NET معتقدند شما در طراحی UI باید با ذهنی باز عمل کنید. موتور صفحات ASP.NET لزوما بهترین ابزار برای طراحی UI نیست. خیلی از ماها احساس میکنیم این موتور بی دلیل پیچیده است. در این باره در یکی از فصول بعد صحبت خواهیم کرد. اما اگر کنجکاو هستید به شما پیشنهاد میکنم که نگاهی به MonoRails (که یک چارچوب[۳] Rails برای داتنت است) یا چارچوب MVC مایکروسافت نگاهی بیندازید. نمیخواهم با پیشنهاد تغییرات فراوان کسی را بترسانم. پس فعلاً بر میگردیم سراغ موضوع خودمان.
[۱] User Inteface
[۲] Presentation Layer
[۳] Framework