Developing.OO.Orthogonality

ترجمه ی http://www.artima.com/intv/dry3.html

هلیکوپتر چهار تا کنترل اصلی داره: پدالهای پائی، دستگیره ی تنظیم ارتفاع، فرمون و گاز.
پدالها، چرخش دم رو کنترل میکنن و میتونید با اونا سر هلیکوپترو توی جهت موردنظر قرار بدید.
دستگیره ی تنظیم ارتفاع با دست چپ کنترل میشه و به پره ها میگه که چقدر هلیکوپتر رو بالا ببرن.
فرمون با دست راست کنترل میشه و به پره ها جهت میده و باعث میشه که هلیکوپتر به یه سمت کج کنه.
گاز، ته دستگیره قرار داره. وقتی که دستگیره به انتها برسه گاز فعال میشه.

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

این همون اتفاقیه که توی کد برنامه میفته. همه مون تا حالا روی سیستمهای این مدلی کار کردیم. که یه تغییر کوچیک روی این ور برنامه، چند تا مشکل اون ور برنامه درست کنه. میری اون ورو درست کنی، باز چند تا مشکل یه جای دیگه درست میشه. و بخاطر یه تغییر باید یکسره با Error ها قایم موشک بازی کنی و بنظر میاد که اصلاحشون هیچ وقت تموم نمیشه.

اگه سیستمتون، Orthogonal (متعامد) نباشه و اجزای سیستم، بیش از حد نیاز با هم در تعامل باشن، همیشه درگیر این مدل Debugging پخش و پلا خواهید بود.

نکته جالبش اینه که من (Dave Thomas) خلبان هلیکوپتر نیستم و واسه اینکه مطمئن شم از مثالی که آوردم، این مطلب رو واسه ی یه خلبان واقعی فرستادم تا نظرشو بدونم. و نوشتم:
"این چیزیست که قصد دارم راجع به کنترلهای هلیکوپتر بنویسم. آیا درست است؟"
و خلبان هلیکوپتر به من ایمیل زد:
"چیزیو که راجع به کنترل هلیکوپتر نوشتید، خوندم.
تمام شب خوابم نبرد."

.Net.UI.ListView.Icon.GetBetterQuality()

احتمالا به مشکل بی کیفیت نشون دادن آیتمهای ListView برخوردید تا حالا. ظاهراً Net. به صورت پیش فرض میاد عمق تصویر رو 256 رنگ میکنه ولی میشه این رو عوض کرد. گوش کنین!


امروز داشتم توی اینترنت دنبال راه حل میگشتم، رسیدم به این صفحه. دو نفر توش نشستن کلی بحث کردن راجع به اینکه چقدر Net. همه چیزش "زیادی منظمه" و اگه بخوای مستقیم با API کار کنی دهنت صاف میشه و اینا.

یکیشون کلی زحمت کشیده بود یه Library نوشته بود تا بتونه Alpha Channel عکسا رو Render کنه.

...

رسیدم به ته صفحه دیدم یه نفر اومده اینو نوشته:
listView1.LargeImageList.ColorDepth = ColorDepth.Depth32Bit;

بد نیست قبل اینکه بخوایم وسط کد برنامه، قدرت نمایی کنیم و ایده های تخمی تخیلی پیاده کنیم، قبلش یه داتِ ناقابل بزنیم و اسم اون member های صاب مرده رو بخونیم!