یکی از بهترین چیزهایی که MVP برای من داشت این بود که تقریباً به من اجازه نمیداد که در صفحات ASPX از کنترلهای Data Aware مثل Grid و Form به صورت خودکار و markup استفاده کنم. به عبارت دیگر Data Binding و واگذار کردن همه چیز به DataSourceها ممنوع شده بود. این طوری من مجبور شدم همه عملیات مثل نمایش اطلاعات در صفحه یا خواندن اطلاعات از کنترلها از طریق CodeBehind انجام دهم. خوبی این کار در این بود که جلوی بعضی خطاها را همان هنگام compile میگیرم. مثل اگر نام فیلدی را اشتباه تایپ کرده باشم یا تعداد پارامترهای دریافتی یک متود را رعایت نکرده باشم، همان زمان کامپایل خطا را میبینم. در حالت DataBinding خودکار نام فیلدها، متودها و اطلاعات پارامترها به صورت string غیر قابل کامپایل در فایل aspx/ascx قرار دارد و تا زمانی که صفحه در یک مرورگر باز نشود نمیتوان متوجه خطا شد.
حس میکنم MVP قدرت تقسیم کار و کار تیمی را افزایش میدهد. چون همان کاری که همیشه در Codebehind انجام میشد، حتی با فرض این که دسترسی به دیتابیس و logic کار در یک لایه جداگانه انجام میپذیرد، را هم میتوان به دو تیکه کاملاً مجزا تقسیم کرده و به افراد مختلف سپرد. این موضوع کار designerها (طراحی صفحات، گرافیک، جاوا اسکریپت) را هم ساده میکند. چون میتوانند به صورت مستقل از برنامهنویسها و بدون آن که مجبور باشند کار همدیگر را خراب کنند، با خیال راحت کارشان را انجام دهند. خوانا شدن کد برنامه، خصوصاً آنچه که در Presenter قرار داد، بخش دیگری از مزایای MVP است که من خودم با دستان خودم لمس کردم.
ممکن است دوستان زیادی پیدا شوند که با نگاهی به کدهای MVP دچار این تصور شوند که کدها بیخودی تیکه تیکه شده و در توابع یکی دو خطی تقسیم شدهاند. جواب به این دوستان بله است. چون به هر صورت MVP مقداری حجم کد را افزایش داده و رفت و آمد بین کلاسها را زیادتر میکند اما هر که دیدن طاووس خواهد جور هندوستان کشد.
پ.ن.: به این لینک هم که توضیحاتی کلی راجع به مدلهای MVP و مشابه MVP است نگاهی بیندازید.
Comments
Model Binding قراره وضعیت رو بهتر میکنه.
http://weblogs.asp.net/scottgu/archive/2011/09/05/web-forms-model-binding-part-1-selecting-data-asp-net-vnext-series.aspx
فقط هنوز به نظرم شرکت ها تمایلی برای استفاده از الگوهای غیر از WebForm ندارن. همینطور نیست؟
Model Binding چیز جالبی به نظر میآید. ما در شرکت قبلی مجبور شدیم برای کمتر کردن کد و راحتتر کردن دیگر برنامهنویسهای تیم، همچین چیزی رو با استفاده از Castle ActiveRecord و ساخت یک Custom Control و ترکیب GridView و Castle ActiveRecord درست کنیم.
خیلی از شرکتها دوست دارند روی همون چیزهای سنتی و دم دستی مایکروسافت کار کنند و خیلی دنبال چیزهای دیگه نرند. اما شرکتهایی هم هستند که با وجود همه مشکلات به دنبال استفاده از روشهای بهینهتر و فناوریهای جدیدتر هستند.
البته در کل در dotNet 4.5 ظاهراً ASP.NET کمی وضعیت بهتری در این زمینه خواهد داشت. همانطور که اشاره شد به Model Binding و …
فکر میکنم این تغییرات در نسخه Windows 8 Developer Preview به همراه ابزار آن (که حدوداً 4.8 گیگابایت است) وجود دارد.
http://msdn.microsoft.com/en-us/windows/apps/br229516
به نظرم ویژگی Strongly Typed Data هم جالبه: http://weblogs.asp.net/scottgu/archive/2011/09/01/strongly-typed-data-controls-asp-net-vnext-series.aspx
البته من یک کامنت در رابطه با اینکه "در dotNet 4.5 این ویژگیهای ASP.NET ظاهراً بهتر خواهد شد" ارسال کردم و ارسال هم شد ولی انگار DISQUS مشکل دارد!
«کامنت A.Karimi»
البته در کل در dotNet 4.5 ظاهراً ASP.NET کمی وضعیت بهتری در این زمینه خواهد داشت. همانطور که اشاره شد به Model Binding و …
فکر میکنم این تغییرات در نسخه Windows 8 Developer Preview به همراه ابزار آن (که حدوداً 4.8 گیگابایت است) وجود دارد.
http://msdn.microsoft.com/en-us/windows/apps/br229516