۶:۰۷ ق.ظ

Model View Presenter - قسمت دوم

در قسمت اول، کلیاتی از الگوی MVP گفته شد. گفته شد که در الگوی MVP با تفکیک شدن کد Business از UI قابلیت تست به خوبی پوشش داده می شود. در این قسمت سعی می کنم جزییات بیشتری از این الگوی UI را شرح دهم.

در یک برنامه کاربردی در یک صفحه یا فرم، اطلاعات Domain در قالب کنترل هایی به کاربر نشان داده می شوند.کاربر می تواند اطلاعات را تغییر دهد و نتیجه را مشاهده کند. کد زدن این تعاملات در Code Behind صفحات(فرمها) و نداشتن یک استراتژی مناسب باعث بروز مشکلاتی از قبیل پیچیدگی، دشواری نگهداری و دشواری در تست می شود.مشکل بزرگتر استفاده مجدد از این کدها در صفحه(فرم) دیگری است که به همان رفتارها نیاز دارد.

انتظار می رود الگوهای UI این مشکلات را برای ما حل کنند به این شکل که حجم بیشتری از کد را بتوان به شکل مکانیزه تست کرد، کدها را بتوان در بین صفحات(فرمها) به اشتراک گذاشت و نهایتاً بتوان UI Logic را به صورت کاملاً مشخص از Business Logic جدا کرد تا خوانایی و قابلیت نگهداری آن بالا برود.

در MVP دو مسئولیت نمایش بصری اطلاعات و هندل کردن رویدادها در دو کلاس View و Presenter تفکیک شده اند.View کنترل های صفحه را مدیریت می کند و رویدادها را به Presenter منتقل می کند.Presenter که شامل UI Logic است، نسبت به رودادها واکنش نشان می دهد و وضعیت View را اداره می کند.نکته مهم این که Presenter به اینترفیسی از View دسترسی دارد و از کلاس Concrete ی View هیچ اطلاعی ندارد و این اصل، قابلیت تست را در این الگو بالا می برد.

شکل زیر به خوبی مفهوم MVP را می رساند:

MVP Concept

MVP دارای سه جزء اصلی به شرح زیر است:

  1. Model: مدل آبجکت سطح Domain است که دیتای Application را نگه می دارد و متدهایی را برای دسترسی به این دیتا فراهم می کند.یک مدل نباید هیچ ارتباطی با User Interface داشته باشد.این محدودیت این امکان را فراهم می کند که در شرایطی که لازم باشد UI به طور کلی عوض شود، کدها به راحتی قابل استفاده مجدد باشند. در واقع Model هیچ دانشی از وجود View و Presenter ندارد.
  2. View: پنجره ای است شامل مجموعه ای از کنترل های UI، که وظیفه اش نمایش/گرفتن اطلاعات مدل به/از کاربر است.این کار با ارتباط غیر مستقیم View و Model انجام می شود، که در این ارتباط غیر مستقیم، View یک Observer بر روی Model است. بسته به قالب UI، این پنجره می تواند User Control، WindowsForm، WebForm و یا هر چیز دیگری باشد.
  3. Presenter: همانطوری که گفته شدView وظیفه دارد تا خروجی اطلاعات Model را به کاربر نشان دهد یا اطلاعات ورودی کاربر را بگیرد. وظیفه Presenter نیز که به عنوان قطعه سوم این پازل سه تایی است، آماده سازی و به عمل آوردن اطلاعات مدل است.رفتار کاربر(از قبیل کلیک کردن، تایپ کردن و …) نیز که توسط View گرفته می شود به Presenter تحویل داده می شود. با این تعاریف Presenter اجازه دارد در مورد هر دوی Model و View بداند تا بتواند نقش واسطه و میانجی گری را بین این دو برقرار کند.

نحوه برقراری ارتباط بین Model و View، شاید دغدغه ای بوده که باعث شده است  الگوی MVP به دو شکل Passive View و Supervising Controller پیاده سازی شود.شکل زیر به خوبی بیانگر این تفاوت هاست:

Passive View vs. Supervising Controller

Passive View دارای محدودیت بیشتری است، در مقابل Supervising Controller انعطاف پذیری بیشتری در UI های پیچیده دارد.باید به این نکته توجه کرد که این انعطاف پذیری در قبال از دست دادن بخش کمی از قابلیت تست بدست می آید.با این توضیحات، برای سیستم های که دارای UI پیچیده و متشکل از تعداد زیادی Grid است، الگوی Supervising Controller پیشنهاد می شود، در غیر این صورت Passive View انتخاب بسیار مناسبی است.

برای کسانی که با الگوی MVC کار کرده و آشنایی دارند، شاید این مطلب جالب باشد که MVP بر اساس و پایه MVC بنا شده است با این تفاوت که در آن کنترل کمتری روی View و Responsibility بیشتری روی Presenter است.می گویند که MVP فرزند و خلف MVC است.

برچسب ها: , , ,

۲:۱۵ ق.ظ

امنیت و کنترل حقوق دسترسی در برنامه های کاربردی

وقتی در برنامه های کاربردی صحبت از امنیت می شود، موضوع صحبت، بخشی از نیازهای کارکردی(Functional) و بخشی دیگر از نیازهای غیر کارکردی است که شامل دو مقوله مهم Authentication و Authorization است.

{ Security } = { Authentication } + { Authorization }

Authentication مشخص می کند که شمای کاربر چه کسی هستید؟ و Authorization که همیشه بعد از Authentication و در صورت تأیید هویت کاربر انجام می شود، مشخص می کند که شما اجازه انجام چه کاری را دارید و اجازه انجام چه کاری را ندارید.

موضوع بحث ما مقوله دوم یعنی Authorization است و هدف معرفی سیستم های موجود، جهت الگوبرداری یا استفاده است.

Authorization Manager(AzMan)

Authorization Manager یا همان AzMan یک سیستم کنترل دسترسی Role-Base در محیط ویندوز است.

مدیریت این سیستم از طریق MMC یا همان Microsoft Management Console در محیط ویندوز انجام می شود.برای دسترسی به این ابزار(در صورتی که بر روی سیستم عامل نصب شده باشد) کافیست دستور azman.msc را در محیط Command Prompt اجرا کنید.

این ابزار امکان تعریف Operation و دسته بندی این Operation ها را در Task ها فراهم می کند.دسترسی نقش ها به این Operation ها و Task ها، تعریف و مدیریت کاربران و نقش ها و تخصیص کاربران به این نقش ها به راحتی در این ابزار قابل انجام است.

AzMan Console

در AzMan می توان محل ذخیره سازی را بر حسب کاربرد در XML File یا Active Directory انتخاب کرد.

برقراری ارتباط در برنامه کاربردی به این سیستم به سادگی قابل انجام است.

اولین امکانی که در دات نت می توان به آن اشاره کرد، کلاس RoleManagerAzManProvider است.برای استفاده از این کلاس کافیست در تگ <roleManager> در Web.Config کلاس فوق را به عنوان defaultProvider مشخص کنیم.با این کار تمامی API مربوط به Roles از AzMan استفاده خواهند کرد.

برای چک کردن دسترسی ها در برنامه کاربردی که مهمترین دغدغه است بایستی از AzMan API که یک کتابخانه COM است استفاده کنیم.در این کتابخانه متدی با نام AccessCheck در اینترفیس IAzClientContext وجود دارد که دسترسی یا عدم دسترسی کاربر را به Task یا Operation خاصی را مشخص می کند.

نکته ی قابل ذکر این که در Enterprise Library در  Security Application Block روی Authorization هم کار شده که یکی از پیاده سازی های آن روی AzMan بوده است.توصیه من اینست که اگر قرار است از AzMan استفاده کنید، به جای این که مستقیماً از AzMan COM API استفاده کنید، از Security Application Block استفاده کنید.

Security Application Block Design

.NET SQL Authorization Manager (NetSQLAzMan)

NetSQLAzMan پروژه ای است Open Source با مدلی شبیه به مدل AzMan با تفاوت ها و قابلیت هایی از قبیل:

- برخلاف AzMan(که COM است)، کتابخانه آن دات نت است.

- محل ذخیره سازی آن SQL Server است.

- برای Administration آن مانند AzMan می توان از کنسول MMC 3.0 استفاده کرد، اما علاوه بر این امکان، با کنسول وب بیس دیگری نیز که برای آن طراحی شده است، این کار قابل انجام است.

NETSQLAzMan Web Interface

- در AzMan در Operationها، نمی توان Hierarchy داشت، اما در این ابزار چنین محدودیتی وجود ندارد.

- در AzMan دسترسی فقط دارای دو حالت است(Allow یا Deny) اما در این ابزار چهار حالت وجود دارد:اول) Allow with delegation دوم) Allow سوم) Deny چهارم) Neutral.

-  AzMan از اعمال Authorization در بازه زمانی خاص پشتیبانی نمی کند، اما در این ابزار چنین نیست.

- و خیلی قابلیت های دیگر …

مطالب گفته شده، خلاصه ای از نتایجی بود که با همراهی و همکاری دوست خوبم علی نوبر بدست آورده بودیم.

بحث Access Control را قبل از این هم با پویا مطرح کرده بودیم، آخرین صحبتی که با هم داشتیم خاطرم هست که قصد داشت چنین سیستمی را طراحی کند ولی از نتیجه اش خبری ندارم.

به هر حال این پست و کامنت های دوستان می تواند باب خوبی را در جهت شناخت این سیستم ها برایمان باز کند.

ببار ای بارون ببار …

ببار ای بارون ببار‎
با دلُم گریه کن، خون ببار‎
در شبای تیره چون زلف یار‎
بهر لیلی چو مجنون ببار ای بارون‎

دلا خون شو خون ببار‎
بر کوه و دشت و هامون ببار‎
دلا خون شو خون ببار‎
بر کوه و دشت و هامون ببار‎
به سرخی لبای سرخ یار‎
به یاد عاشقای این دیار‎
به داغ عاشقای بی مزار ای بارون‎

ببار ای بارون ببار‎
با دلُم گریه کن، خون ببار‎
در شبای تیره چون زلف یار‎
بهر لیلی چو مجنون ببار ای بارون‎

ببار ای ابر بهار‎
با دلُم به هوای زلف یار‎
داد و بیداد از این روزگار‎
ماهُ دادن به شبهای تار ای بارون‎

این تصنیف زیبا از استاد شجریان، خاطرات قشنگی را از دوره ی آموزش سربازی ام در کامیاران کرمانشاه(دی و بهمن ۸۵) زنده می کند.یادش بخیر!

از اینجا می توانید دانلودش کنید.

برچسب ها: ,

۵:۴۶ ق.ظ

پروفسور حسابی

پروفسور حسابی چند نظریه مهم در علم فیزیک داشتند که مهم ترین و آخرین آن ها نظریه بی نهایت بودن ذرات بود , در این ارتباط با چندین دانشمند اروپایی مکاتبه و ملاقات می کنند و همه آنها توصیه می کنند که بهتر است که بطور مستقیم با دفتر پروفسور اینشتن تماس بگیرد بنابراین ایشان نامه ای همراه با محاسبات مربوطه را برای دفتر ایشان در دانشگاه پرینستون می فرستند بعد از مدتی ایشان به این دانشگاه دعوت میشوند و وقت ملاقاتی با دستیار اینشتن برایشان مشخص میشود پس از ملاقات با پروفسور شتراووس به ایشان گفته می شود که برای شما وقت ملاقاتی با پروفسور اینشتن تعیین می شود که نظریه خود را بصورت حضوری با ایشان مطرح کنید. پروفسور حسابی این ملاقات را چنین توصیف می کنند:

وقتی برای اولین بار با بزرگترین دانشمند فیزیک جهان آلبرت اینشتن روبه رو شدم ایشان را بی اندازه ساده، آرام و متواضع یافتم و البته فوق العاده مودب و صمیمی! زودتر از من در اتاق انتظار دفتر خودش، به انتظار من نشسته بود و وقتی من وارد شدم با استقبالی گرم مرا به دفتر کارش برد و بدون اینکه پشت میزش بنشیند کنار من روی مبل نشست، نظریه خود را در ارتباط با بی نهایت بودن ذرات برای ایشان توضیح دادم، بعد از اینکه نگاهی به برگه های محاسباتی من انداختند، گفتند که ما یکماه دیگر با هم ملاقات خواهیم کرد.

یکماه بعد وقتی دوباره به ملاقات اینشتن رفتم به من گفت: من به عنوان کسی که در فیزیک تجربه ای دارم می توانم به جرات بگویم نظریه شما در آینده ای نه چندان دور علم فیزیک را متحول خواهد کرد. باورم نمی شد که چه شنیده ام، دیگر از خوشحالی نمی توانستم نفس بکشم، در ادامه اما توضیح دادند که البته نظریه شما هنوز متقارن نیست باید بیشتر روی آن کار کنید برای همین بهتر است به تحقیقات خود ادامه دهید من به دستیارم خواهم گفت همه امکانات لازم را در اختیار شما بگذارند، به این ترتیب با پی گیری دستیار و ارسال نامه ای با امضا اینشتن، بهترین آزمایشگاه نور آمریکا در دانشگاه شیکاگو، باامکانات لازم در اختیار من قرار دادند و در خوابگاه دانشگاه نیز یک اتاق بسیار مجهز مانند اتاق یک هتل در اختیار من گذاشتند، اولین روزی که کارم را در آزمایشگاه شروع کردم و مشغول جابجایی وسایل شخصی بر روی میزم و کشوهای آن بودم، متوجه شدم یک دسته چک سفید که تمام برگه های آن امضا شده بود در داخل یکی از کشوها جا مانده است، بسرعت آن را نزد رئیس آزمایشگاه بردم و مسئله را توضیح دادم، رئیس آزمایشگاه گفت این دسته چک جا نمانده متعلق به شما است که تمام نیازمندیهای تحقیقاتی خود را بدون تشریفات اداری تهیه کنید این امکان برای تمام پژوهشگران این آزمایشگاه فراهم شده است، گفتم اما با این روش امکان سواستفاده هم وجود دارد؟ او در پاسخ گفت درصد پیشرفت ما از این اعتماد در مقابل خطا های احتمالی همکاران خیلی ناچیز است.

بعد از مدتها تحقیق بالاخره نظریه ام آماده شد و درخواست جلسه دفاعیه را به دانشگاه پرینستون فرستادم و بالاخره روز دفاع مشخص شد، با تشویق حاضرین در جلسه، وارد سالن شدم و با کمال شگفتی دیدم اینشتن در مقابل من ایستاد و ابراز احترام کرد و به دنبال او سایر اساتید و دانشمندان هم برخواستند، من که کاملا مضطرب شده و دست وپای خود را گم کرده بودم با اشاره اینشتن و نشتستن در کنار ایشان کمی آرام تر شده، سپس به پای تخته رفتم شروع کردم به توضیح معادلات و محاسباتم و سعی کردم که با عجله نظراتم را بگویم که پروفسور اینشتن من را صدا کرده و گفتند که چرا اینهمه با عجله؟ گفتم نمی خواهم وقت شما و اساتید را بگیرم ولی ایشان با محبت گفتند خیرالان شما پروفسور حسابی هستید و من و دیگران الان دانشجویان شما هستیم و وقت ما کاملا در اختیار شماست.

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

۵:۱۷ ق.ظ

Windows Communication Foundation - قسمت اول

ٌWCF، یک پلتفرم مطمئن، قابل توسعه و امن برای رد و بدل پیام(Messaging) بین Application های توزیع شده در دات نت ۳/۰ و در محیط ویندوز است که با پشتیبانی از پروتکل هایی چون IPC، TCP، HTTP و MSMQ کار انتقال بسته های اطلاعاتی را انجام می دهد.

جایگاه WCF را در دات نت ۳/۰ در شکل زیر می بینید:

NETFX3

چیزی که مهم است اینست که شما می توانید سرویس هایتان را بدون استفاده از  WCF هم توسعه دهید اما این کار با WCF بسیار ساده تر قابل انجام خواهد بود.WCF یک پیاده سازی و توسعه مایکروسافتی از تکنولوژی ها و استانداردهای موجود است.

WCF یک محیط Runtime برای سرویس های شما فراهم می کند و شما را قادر می سازد تا سرویس های خود را با انوع داده ای CLR ، به بیرون افشاء(Expose) کنید و سرویس های دیگر را با نوع داده ای CLR مصرف(Consume) کنید.این کار با تعریف قراردادهایی با عنوان های Data Contract، Service Contract،Operation Contract در WCF امکان پذیر است.

WCF توانمندی های خود را در یک محیط Configurable و قابل انتخاب برای برنامه نویس ارائه می دهد.به عنوان مثال وقتی شما سرویسی را به بیرون Expose می کنید، بسته به اینکه نرم افزارتان در چه محیطی اجرا می شود، می توانید پروتکل ارتباطی مناسب و نحوه رمزنگاری مناسب پیام ها را انتخاب کنید.به عنوان مثال در یک اینترانت که سیستم ها پشت فایروال قرار دارند، استفاده از پروتکل TCP برای برقراری ارتباط و رمزنگاری پیام ها به روش binary معمولاً انتخاب مناسبی است.اما برای دسترسی به سرویس در محیط اینترنت معمولاً از پروتکل HTTP استفاده می شود و برای رمزنگاری پیام ها بسته به حجم پیام ها، از روش Text Encoding و یا روش های دیگری چون MTOM استفاده می شود.آنچه مسلم است اینست که در محیطی امنیت اطلاعات اهمیت بیشتری دارد و در محیطی دیگر Performance. شناخت این جور محدودیت هاست که ما را در Config کردن هر چه بهتر سرویسمان کمک می کند.

برچسب ها:

۱۱:۴۴ ب.ظ

شروع دوباره با php

منتقل شدن وبلاگ فردامدیا به نرم افزار قدرتمند WordPress بهانه ای شد تا برنامه نویسی در محیط وب را این بار به زیان php تجربه کنم.

برای شروع، نرم افزار VS .php را برای Visual Studio 2008 دانلود کردم .توسعه برنامه های کاربردی وب به زبان php در این محیط ،برای ما دات نتی ها بسیار جذاب است.امکانات ویژه ی این محیط از قبیل طراحی، توسعه، Debug و Deploy به توسعه سریع برنامه ها کمک زیادی می کنند.

vsphp

۱۱:۴۰ ب.ظ

CSS Tips and Tools

ظاهر یک سایت با تعریف CSS ها ساخته می شود.این لینک منابع ارزشمندی را برای استفاده و کسب مهارت در این زمینه در اختیار شما قرار می دهد.

css

برچسب ها:

MVP UI Pattern - قسمت اول

در توسعه واسط کاربری(GUI Development) نرم افزار، مشکلات مشابه زیادی وجود دارد که ما را به سمت راه حل های مشابهی هدایت می کند(Pattern ها).

مشخص و متمایز نبودن مسئولیت ها ، باعث ایجاد پیچیدگی در لایه UI می شود و بخش عمده ای این پیچیدگی اضافه شدن بخش های عمده ای از وظایف لایه های دیگر ، مخصوصاً Business Logic به این لایه است.

الگوهای متفاوتی برای این مسائل و مشکلات ارائه شده است.برخی از آنها تغییر پیدا کرده و به بلوغ رسیده اند و برخی دیگر کاملاً منسوخ شده اند.الگوی Model View Presenter یا همان MVP، الگوی مناسبی برای رفع این مشکلات است.

در این الگو سعی بر آن است که کد Business Logic به طور کامل از لایه UI جدا شود.این مسأله از چند جهت حائز اهمیت است.اول افزایش قابلیت تست اتوماتیک است که نهایتاً منجر به کامل تر و آسانتر شدن تست خواهد شد و دوم امکان استفاده مجدد(Reusability) از لایه Presentation.

در این مدل UI و Presentation ، دو لایه کاملاً مجزا خواهند بود که مسئولیت های متفاوتی دارند.

UI فقط شامل مجموعه ای از کنترلها، فرم ها و User Control هاست.لایه Presentation نیز مسئولیت پیاده سازی رفتارهای این کنترل ها مانند اعتبارسنجی را بر عهده دارد.

در این مدل این نکته بسیار مهم است که لایه Presentation هیچ اطلاعی از لایه UI ندارد و از طریق یک Interface با این لایه صحبت می کند.به عبارتی دیگر UI در این الگو باید اینترفیسی را پیاده سازی کند که لایه Presentation به شکل کاملاً Abstract با این اینترفیس کار می کند و هیچ اطلاعی از پیاده سازی آن ندارد.یکی از مهمترین نتایج این مهم استفاده مجدد(Reusability) از لایه Presentation در تکنولوژی های مختلف UI مانند وب، ویندوز، Device و … است.شکل زیر این مسأله را به خوبی نشان می دهد.

Presenter با استفاده از اینترفیس IView با View صحبت می کند بدون اینکه هیچ اطلاعی از پیاده سازی آن داشته باشد.این مثال ، نمومه بسیار ساده ای از پیاده سازی MVP در ASP .NET است.مثال دیگری که می توان به آن استناد کرد، مثالی از Code Project است.

برچسب ها: , , ,

۹:۰۷ ب.ظ

تولد دوباره فردامدیا

بالاخره تعصب دات نتی رو کنار گذاشتم و فردامدیا رو با WrodPress راه اندازی کردم.

تنوع Template ، تنوع Plug-in، فراگیر بودن و امکانات عالی این ابزار از دلایل این تغییر بود.

برچسب ها: ,