PDA

View Full Version : گفتگو: بحث دربارۀ گفتگوی فنی شماره یک (اصول و قواعد کد نویسی)



Mehdi Asgari
سه شنبه 11 خرداد 1389, 18:08 عصر
سلام
احتمالا در اعلانات سایت دیده باشید که اولین سری گفتگوی فنی سایت شروع به کار کرد.
تاپیک اصلی (http://barnamenevis.org/forum/showthread.php?t=224704) مربوط به سوال و جواب بوده و فقط مجری و مهمانان در اون شرکت دارند. دیگر کاربران سایت برای مشارکت در بحث (گفتگو در مورد سوال و جواب ها ، انتقاد یا پیشنهاد در مورد بحث جاری ، پیشنهاد سوال به مجری برای پرسیدن از مهمانان و ...) از این تاپیک استفاده کنند.

ahmadbadpey
سه شنبه 11 خرداد 1389, 19:17 عصر
ایده خوبیه
منتها چون گفتگوها زنده است باید مثه سیستم های chatting پیاده سازی بشه
فکر کنم تو vBulletin این کار با Ajax به راحتی امکان پذیر باشه .
این جوری ما مجبوریم مدام صفحه رو بارگذاری کنیم .

sahele_sheni
سه شنبه 11 خرداد 1389, 19:49 عصر
یعنی زحمت یه refresh رو هم نمیکشید ؟

Mehdi Asgari
سه شنبه 11 خرداد 1389, 19:53 عصر
اجازه بدید فعلا با روند فعلی بریم جلو. بعدا با توجه به میزان استقبال و درصد پیشرفت ، می تونیم روی خیلی ایده های دیگری (از جمله سیستم چت آنلاین ، انتشار پادکست یا حتی ویدئو) فکر کنیم. منتها فعلا شما به دید یه سیستم آزمایشی نگاه کنید که قبلا در این سایت سابقه نداشته و ما برای اولین بار داریم همچین طرحی رو اجرا می کنیم. در ضمن فعلا گفتگو ها کاملا real time نیست

shirin_sh1024
سه شنبه 11 خرداد 1389, 19:59 عصر
به نظر من طرح خیلی خوبیه ،امیدوارم ادامه پیدا کنه
یکی از دوستانم که زحمت کشیدن و پا برهنه پریدن وسط تاپیک با اینکه گفته شده بود اونجا پست نزارند! :اشتباه:

vbnovin
سه شنبه 11 خرداد 1389, 20:06 عصر
سوالم در زمینه فناور برنامه نویسی موبایل هستش در.NET , Framwork . اگه از موضوع بحثتان دورم پس ffoadn ...ولی اگر مختصر میتونید راهنمایی کنید ..

چوی اینروزها خیلی فکرم رو مشغول کرده آیا این فناوری در Framwork پیشرفتی داشته و چگونه است یگویید تا من سراغ ان برم ,... البته من بی اطلاع هستم .
بهمین خاطر مجیور شده که سراغ جاوا و NetBeans برم که زیاد موفقیت آمیز نبود البته سری به تایپیکها جاوا و مشابه این پستها زدم ولی پاسخس نگرفتم .

البته من هم مثل دوست خوبمون از این طریق گفتگو زیاد راضی نیستم ولی بازم خدا را شکر که امثال شما به فکر ما هستید و همی هم غنیمت می دانم ...

نمی دونم چرا کسی نیست یا نه جواب نمی دن ... اینطوری جواب نمی ده بدرد نمی خوره ببخشید رک می گم

Microname
چهارشنبه 12 خرداد 1389, 00:37 صبح
با تشکر از حرکت خوبتان! به شدت منتظر real time شدن بحث هستم! چون بحث داغ می مونه و جذاب
قضاوت هم در مورد بحثی که تا به حال شده زوده! فقط امیدوارم بحث به سمت هر چه فنی تر شدن پیش برود و از گفتن بدیهیات پرهیز شود. مثلا
"برای برنامه نویس(کد نویس) خوب شدن نیاز به تجربه هست!" خب! معلومه که هست!

یه سوال : آیا محوریت مباحث روی ابزارهای مایکروسافتی هست؟ (یعنی اگر نیاز به ابزار در گفتگوها شد ، از پلتفرم مایکروسافتی استفاده میشود؟)

Mehdi Asgari
چهارشنبه 12 خرداد 1389, 09:52 صبح
یه سوال : آیا محوریت مباحث روی ابزارهای مایکروسافتی هست؟ (یعنی اگر نیاز به ابزار در گفتگوها شد ، از پلتفرم مایکروسافتی استفاده میشود؟)
نه لزوما. فعلا به دلیل نداشتن تالار مرتبط به این موضوع ها و نیز بیشتر بودن تعداد برنامه نویسان محصولات مایکروسافت ، بحث رو در این تالار راه انداختیم (سعی بر این هست که در استفاده از ابزار طوری عمل کنیم که طیف وسیعی از برنامه نویسا بتونن از مبحث استفاده کنن)

saed2006
چهارشنبه 12 خرداد 1389, 10:05 صبح
سلام
پیشهاد میکنم این گفتگو ها بالای تمام تاپیکهای مرتبط اضافه بشه تا همه در جریان قرار بگیرند

el_abdollahi
چهارشنبه 12 خرداد 1389, 12:34 عصر
سلام
میشه لینک دانلود کتاب Beautiful Code رو بزارین.
ممنون

r00tkit
چهارشنبه 12 خرداد 1389, 12:53 عصر
چنین لینکی توی سایت قرار نمی گیره(قوانین سایت) : پ.خ بده لینکشو بدم

کتاب های شاهکار دیگه
Pragmatic Programmer, The: From Journeyman to Master

Code Complete By Steve McConnell

و کتاب های اقای Joel Spolsky (http://www.amazon.com/s?ie=UTF8&tag=mozilla-20&index=blended&link_code=qs&field-keywords=Joel%20Spolsky&sourceid=Mozilla-search)

Mostafa_Dindar
چهارشنبه 12 خرداد 1389, 14:44 عصر
در پيام خصوصي هم به آقاي اصغري گفتم ،

به نظر ميرسه آقاي مداح مشغله زيادي داشته باشند و خيلي دير جواب ميدن .

اگه بشه ، كه تعداد ميهمانان را بيشتر كنيد ، تا تاپيك از حالت ركود خارج بشه بسيار موثرتر خواهد بود .

ztx4
چهارشنبه 12 خرداد 1389, 15:36 عصر
طرح بسیار بسیار عالی و مفیدی است.
لطفا این کار رو ادامه بدید.
من فکرمی کنم این کار تاثیر زیادی در بالا بردن سطح سایت داشته باشه.
من که لینک بحث رو برای همه ی دوستانمم ایمیل کردم تا اونها هم بیان و استفاده کنند.(دوستانم عضو برنامه نویس نیستند)

از همه ی دوستان متشکرم.
ممنون

xxxxx_xxxxx
چهارشنبه 12 خرداد 1389, 23:20 عصر
سلام،
یک سؤالی که برای من پیش آمده این هست که اگر همیشه کدهای تمیز بنویسیم، اگر همیشه کدهای خوانا بنویسیم، اگر همیشه اصول و قواعد نامگذاری شناسه ها رو رعایت کنیم؛ تا جایی که به قول آقای مداح ذهن برای این شیوه کدنویسی تربیت بشه، اونوقت چطور میتونیم سر از یک کد کثیف در بیاریم؟

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


سؤال دوم من در مورد متغیر شمارنده در حلقه ها هست. آقای موسوی از انتخاب نام هایی مثل i و j و k و ... به عنوان ویژگی های یک کد کثیف یاد کردند (البته به نقل از یک کتاب). اگر اینطور هست، پس اصلاً چطور شد که i و j و ... برای همه برنامه نویسان همیشه یادآور متغیر شمارنده هست و چرا اینقدر شیوع پیدا کرده؟


متشکرم/

ztx4
چهارشنبه 12 خرداد 1389, 23:37 عصر
یک سوال داشتم که امیداورم دوستان شرکت کننده در بحث پاسخ بدهند.

فکر نمی کنید نوشتن کد به روشی که شما می فرمایید کمی سخت و خسته کننده باشه؟
مثلا در حلقه ی for به جای استفاده از i,j,k از متغیر های ColomNum,RowNom ئ امثال اینها که خیلی طولانی هستند استفاده کنیم!

آیا این روش سخت تر نیست؟
آیا شما به عنوان یک برنامه نویس با تجربه می تونید بگید که بعد از مدتی به این سختی عادت میکنیم؟

alireza_s_84
پنج شنبه 13 خرداد 1389, 00:21 صبح
به نظر من خیلی از گفته های مطرح شده در عمل نادیده گرفته میشن البته هرکسی برای خودش قواعد کاری داری
من خیلی کم توی حلقه ها از i و j استفاده میکنم ولی صرفا نباید استفاده کرد رو نمیشه قبول کرد.
این رو توی همه ی زمینه ها تجربه کردم چه کد نویسی چه طراحی چه نقشه کشی و چه نقشه برداری و خیلی چیزهای دیگه همیشه تئوری به ایده آل ها میپردازه ولی در عمل خیلی از این ایده آل ها زیر پا گذاشته میشن.
هر چیزی بستگی به موقعیت داره و اینکه چطور میخوای کار کنی و هیچ چیز قاطعیت صد در صد نداره من توی صحبتهای اساتید مهمان تا الان نکته جدیدی ندیدم ولی خوشم میاد بالاخره استارتی زده شد.

el_abdollahi
پنج شنبه 13 خرداد 1389, 12:14 عصر
با سلام و تشکر
منظور شما اینه که استفاده از region خوب نیست؟
من فکر میکردم که کمک زیادی به خوانایی کد و مرتب بودنش میکنه.
یعنی سعس کنیم ازش استفاده نکنیم؟

Mostafa_Dindar
پنج شنبه 13 خرداد 1389, 13:06 عصر
با سلام و تشکر
منظور شما اینه که استفاده از region خوب نیست؟
من فکر میکردم که کمک زیادی به خوانایی کد و مرتب بودنش میکنه.
یعنی سعس کنیم ازش استفاده نکنیم؟

نه اينكه خوب نيست ، نبايد استفاده از اون باعث بشه كدهاي بودار بنويسين و مخفيش كنين

Sajjad.Aghapour
پنج شنبه 13 خرداد 1389, 18:03 عصر
سلام...
جناب مداح، مهدی عسگری و موسوی خسته نباشید....

چون دیدم میخواهید بحث Refactoring رو تموم کنید میخواستم پیشنهاد بدم در مورد تکنیک های Refactoring نظیر Extract Methods, Extract Interface و ... هم کمی به طور اجمالی توضیحی بدید...

با تشکر/

Mostafa_Dindar
شنبه 15 خرداد 1389, 15:59 عصر
به نظرم جالب بود ،

Naming Conventions for .NET / C#‎ Projects (http://www.akadia.com/services/naming_conventions.html)

شما هم نگاهي بيندازيد .

Behrouz_Rad
شنبه 15 خرداد 1389, 19:13 عصر
به نظرم جالب بود ،

Naming Conventions for .NET / C#‎‎ Projects (http://www.akadia.com/services/naming_conventions.html)

شما هم نگاهي بيندازيد .

بعضی چیزهاش منسوخ شده.

saed2006
یک شنبه 16 خرداد 1389, 12:30 عصر
دوست عزیز جناب اقای اقا مهدی عسگری به نظر من اگر تا جایی که امکان داره جلو بحث ها گرفته نشه بهتر هست احساس کردم توی بحث فعلی اساتید حرف های زیادی برای گفتن دارن اما بعضا تصمیم گرفته میشه که بحث عوض بشه که این درست نیست
به نظرم اجازه بدین بحث پیش بره تا وقتی که حرف ها ادامه داره جلو اون گرفته نشه خطری که این گفتگوها رو تهدید میکنه
"خفه کردن یا خفه شدن گفتگو در نطفه هست"

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

Mehdi Asgari
یک شنبه 16 خرداد 1389, 12:46 عصر
اتفاقا من هم با شما موافقم ولی نمی دونم منظورتون آیا پست خاصی هست؟
من سعی می کنم از هر مبحثی یه نتیجۀ خوبی گرفته بشه و بعد بریم سراغ مبحث بعدی. از طرفی هم نمی خوام مدت های مدید سر یک بحث خاص بمونیم. در ضمن اینجا سه نفری با هم تصمیم می گیریم.

vcldeveloper
یک شنبه 16 خرداد 1389, 12:55 عصر
به نظرم اجازه بدین بحث پیش بره تا وقتی که حرف ها ادامه داره جلو اون گرفته نشه خطری که این گفتگوها رو تهدید میکنه
"خفه کردن یا خفه شدن گفتگو در نطفه هست"
اینطور نیست؛ چون مهمانان بحث با مجری برنامه دائما در ارتباط هستند، و نظرات خودشان را با هم رد و بدل می کنند، تا در حین بحث چیزی از قلم نیافته، و بحث به از مسیر منحرف نشه. اینطوری نیست که مجری همینطوری از یک شاخه به شاخه ایی بپره، و مثلا مهمانان را غافلگیر کنه. این بحث ها فقط بهانه ایی هستند برای انتقال دانش صحیح درباره موضوعات خاص به کاربران.

saed2006
یک شنبه 16 خرداد 1389, 12:57 عصر
اتفاقا من هم با شما موافقم ولی نمی دونم منظورتون آیا پست خاصی هست؟
من سعی می کنم از هر مبحثی یه نتیجۀ خوبی گرفته بشه و بعد بریم سراغ مبحث بعدی. از طرفی هم نمی خوام مدت های مدید سر یک بحث خاص بمونیم. در ضمن اینجا سه نفری با هم تصمیم می گیریم.

منظورم


من یک مبحث هم مد نظرم هست برای این گفتگو: مستند سازی کد
منتها قبل از ورود به این مبحث ، شما اگه حرفی در ادامۀ مبحث نام گذاری و کد اصولی و Refactoring دارید ، بگید تا اون مبحث رو تموم کرده و سراغ بحث جدید بریم.
به ذهن میاد کمی تعجیل وجود داره
منظور من از عدم تزریق یعضی از گفتگو ها گفتگوهای مربوط به تاپیک "دربارۀ گفتگوی فنی شماره یک (اصول و قواعد کد نویسی) " هست
و در ضمن به اجرای خوب شما و گفتگو های مستدل دوستان عزیز اقایان مداح و موسوی تبریک میگویم

mydesign
یک شنبه 16 خرداد 1389, 20:42 عصر
با سلام خدمت همه ی دوستان

از زحمتی که کشیدید بسیار ممنون امیدوارم بحث ادامه دار باشه

دوستان و اساتید گرامی آیا امکانش هست در مورد تحلیل یک سیستم قبل از شروع برنامه نویسی و روشهای مدلینگ سیستم ، چگونگی تحلیل یک سیستم و استفاده از UML و RUP و گامهایی که قبل از شروع برنامه نویسی باید به آنها پرداخته بشه در آینده صحبت کنید؟

Reza1607
دوشنبه 17 خرداد 1389, 11:21 صبح
یک پیشنهاد داشتم
اگه امکانش هست این بحث ها رو دسته بندی کنید وبه عنوان یک مقاله در اختیار اعضا قرار بدین

saed2006
دوشنبه 17 خرداد 1389, 11:28 صبح
بحث ها که جلو تر رفت امکان چاپ کتابی تحت همین عنوان هم وجود داره
کتابی خاص که بی شک به زبان فارسی تا به حال نوشته نشده است
چاپ همچین کتاب و حمایت از ان تا حدی میتونه زحمات دوستان دست اندر کار رو جبران کند

Behrouz_Rad
دوشنبه 17 خرداد 1389, 20:31 عصر
برادر مهدی موسوی بنده در حال حاضر همچنان دارم یه بوی بدی احساس می کنم.
در مثال ماشینی که زدید، باید متدهای Start و Brake رو Virtual تعریف کنید اما این کار رو نکردید.

موفق باشید.

rozi_rezaei
سه شنبه 18 خرداد 1389, 02:44 صبح
با سلام به دوستان
گفتگوی فنی ایده خوب وجالبیه.من که خیلی استفاده کردم.
خسته نباشید و متشکرم

ricky22
سه شنبه 18 خرداد 1389, 07:35 صبح
برادر مهدی موسوی بنده در حال حاضر همچنان دارم یه بوی بدی احساس می کنم.
در مثال ماشینی که زدید، باید متدهای Start و Brake رو Virtual تعریف کنید اما این کار رو نکردید.

موفق باشید.
میشه لطف کنید دلیلشم بفرمایید ما تازه کارام بهره ببریم؟
ممنون

Behrouz_Rad
سه شنبه 18 خرداد 1389, 09:28 صبح
میشه لطف کنید دلیلشم بفرمایید ما تازه کارام بهره ببریم؟
ممنون
البته بنده تماشاچی هستم ولی اگر دوربین روی من بیاد دلایلم رو عرض می کنم :چشمک:

در متد Brake کلاس Car دستور چاپ عبارت Car Call و در متد Brake کلاس Porsche دستور چاپ عبارت Porsche Call رو بنویس و به شکل ذیل فراخوانی کن:



public void test(Car c)
{
c.Brake();
}

Car car = new Car();
Porsche porsche = new Porsche();

test(car);
test(porsche);

در هر دو حالت میبینی که عبارت Car Call در خروجی ظاهر میشه که این صحیح نیست. حال متد Brake کلاس Car رو Virtual و متد Brake کلاس Porsche رو override تعریف کن.. در این حالت، دستورات فوق موجب میشن که عبارت مخصوص همان متد در خروجی چاپ بشه که این صحیح هست.

موفق باشید.

saed2006
سه شنبه 18 خرداد 1389, 10:29 صبح
البته بنده تماشاچی هستم ولی اگر دوربین روی من بیاد دلایلم رو عرض می کنم :چشمک:

اگر یک صندلی هم اضافه میکردین که جناب بهروز از جایگاه تماشاچیان بیاد و کنار خودتون بشینه
بد نبود :چشمک:

salehbagheri
سه شنبه 18 خرداد 1389, 10:35 صبح
به نظر من بهتره يه مقدار هم در مورد Prefix هاي كلاس و توابع صبحت كنيد.

مثلا كلاسي كه با Abstract تعريف شده با كلاسي كه Virtual تعريف شده چه تفاوتهايي داره. overrides چي هست و چه كابردهايي داره ...
sealed , static , ...

اينها رو من چندسال پيش يه چيزهايي در موردشون خوندنم و در كتابها هم توضيح مختصري داده بودند ولي واقعيتش تفهيم نشد.

تازه الان كه بعد از 4 5 سال دارم برنامه نويسي ميكنم مفهومشون رو نيمه نصفه درك ميكنم.

تازه كارها كه ديگه جاي خود دارند.

Mostafa_Dindar
سه شنبه 18 خرداد 1389, 11:53 صبح
به نظر من بهتره يه مقدار هم در مورد Prefix هاي كلاس و توابع صبحت كنيد.

مثلا كلاسي كه با Abstract تعريف شده با كلاسي كه Virtual تعريف شده چه تفاوتهايي داره. overrides چي هست و چه كابردهايي داره ...
sealed , static , ...

اينها رو من چندسال پيش يه چيزهايي در موردشون خوندنم و در كتابها هم توضيح مختصري داده بودند ولي واقعيتش تفهيم نشد.

تازه الان كه بعد از 4 5 سال دارم برنامه نويسي ميكنم مفهومشون رو نيمه نصفه درك ميكنم.

تازه كارها كه ديگه جاي خود دارند.


البته پرواضح است كه كلمات كليدي Abstract ، Virtual و ... Perfix نيستند .

من با برادر salehbagheri (http://barnamenevis.org/forum/member.php?u=39960) موافقم ، تا حالا چندين مرتبه در مورد اونها خوندم ، ولي هنوز مفهوم رو كامل درك نكردم. شايد علت نبودن نياز بوده ، يعني تا اون ضرورت نياز رو احساس نكني ، اون مفاهيم رو هم نميتونيم درك كنيم .

ولي تصور ميكنم اون هم يك تاپيك جداگانه و مختص خودشو ميخواد ، كه اميدوارم مديريت در موردش فكر كنه و اون رو يكي از گزينه هاي بعدي "گفتگوهاي فني" قرار بده .

به عنوان نمونه ، من با اينكه تفاوت متدهاي Static و Instance Methods رو ميدونم ،ولي هنوز در محل استفاده اونها مشكل دارم .

تمام متدهاي كلاس Utility من از نوع Static هستند ، آيا بايد غير از اين باشه ؟

Mehdi Asgari
سه شنبه 18 خرداد 1389, 12:26 عصر
دوستان ، من مطلبی رو شفاف کنم
برای شمارۀ اول گفتگوی فنی (که الان در حال ضبط و نیز روی آنتنه) فقط بر روی تشخیص و تولید کد خوب بحث می کنیم (و سعی بر این است که مستقل از زبان و پلتفرم بحث کنیم)
بحث های فنی تر (مثل بحث شی گرایی) رو قصد داریم در آینده در گفتگوهای بعدی مطرح کنیم
(لطفا فعلا بحث معطوف باشه بر چگونگی نوشتن کد خوب. جزییات فنی رو لطفا مطرح نکنید)

ASKaffash
سه شنبه 18 خرداد 1389, 15:06 عصر
سلام
واقعا از بحث لذت بردم توی این 20 سال بخش زیادی ار موضوعات را از نزدیک لمس کرده بودم ولی بصورت متمرکز ندیده بودم از یک بخش خیلی دلخور شدم و آن موضوع i , j , k است این روش نامگذاری یک استاندارد توفیق اجباری شده است و این موضوع از نامگذاری متغیرهای صحیح در زبان فرترن 77 به ارث رسیده و ظاهرا همه این روش را پذیرفته اند (یک توافق جمعی کاری به غلط و درست ندارم) پس لازم بود به این موضوع اشاره می شد ولی با همه اوصاف انصافا شرکت کنندگان باتجربه و مسلط هستند معلوم است خاک برنامه نویسی خورده اند.

Mostafa_Dindar
سه شنبه 18 خرداد 1389, 15:25 عصر
لطفا يكي به من بگه ، در مثال آقاي موسوي ، اگر از Car از ICar ارث بري نميكرد ، چه اتفاقي ميافتاد ؟

در اين مثال چه ضرورتي داشت كه يك اينترفيس داشته باشيم ؟

salehbagheri
سه شنبه 18 خرداد 1389, 15:30 عصر
(لطفا فعلا بحث معطوف باشه بر چگونگی نوشتن کد خوب. جزییات فنی رو لطفا مطرح نکنید)

وقتي يك بنده خدا محتواي كد رو نميفهمه از كجا تشخيص بده خوبه يا بد؟ اگه مخاطبان شما افراد حرفه اي هستند كه هيچ! اگه افراد مبتدي رو مخاطب قرار ميديد بايد همه چيز رو مد نظر داشته باشيد! پس در مثالهاتون از شبه كد استفاده كنيد تا دركش بهتر تر بشه ...

Behrouz_Rad
سه شنبه 18 خرداد 1389, 18:12 عصر
لطفا يكي به من بگه ، در مثال آقاي موسوي ، اگر از Car از ICar ارث بري نميكرد ، چه اتفاقي ميافتاد ؟

در اين مثال چه ضرورتي داشت كه يك اينترفيس داشته باشيم ؟
آقای کارگردان لطفاً مجددا دوربین رو این سمت بیارید... آها مرسی ممنون :)

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

بنده اگر جای برادر موسوی بودم، اسم interface رو ICar نمیگذاشتم. به نظر من نام IMobility بهتر هست.. یعنی هر چیزی که حرکت می کنه. منظور این نیست که مثلاً یک "مگس" هم توسط یک شرکت تولید میشه، منظور این هست که از واژه ای کلی تر استفاده بشه و پیش خود اینطور در نظر بگیری که منظور از IMobility یعنی "تمامی وسایل نقلیه ی قابل حرکت".

"تمامی وسایل نقلیه ی قابل حرکت" دو خصیصه ی "رنگ" و "مالک" و رفتارهای "ترمز" و "شروع حرکت" رو دارن... پس ICar محدود کننده است. حداقل در ذهن.

و اما... interface یک قالب کلی از خصیصه ها و رفتارهای خامی ایجاد می کنه که بعداً توسط کلاس هایی که اون رو پیاده سازی می کنن تغییر می کنه... من به interface ها میگم "یاد آور".

بعداً اگر قرار بر این بود که کلاسی برای دوچرخه یا موتورسیلکت داشته باشم، کلاسی با نام Bike ایجاد می کنم و اجزای IMobility رو برای اون پیاده سازی می کنم...

این طوری بسیار زیباتر خواهد بود...

در حقیقت interface بهت "یادآوری" می کنه که: "پسرم وسیله ی نقلیه ی تو حتما باید حداقل دو خصیصه ی "رنگ" و "مالک" و رفتارهای "ترمز" و "شروع حرکت" رو داشته باشه تا بتونی یک وسیله ی نقلیه حسابش کنی"

لطفاً جمله ی بالا رو 100 بار با دقت بخون ;)

موفق باشید :لبخندساده:

saed2006
سه شنبه 18 خرداد 1389, 19:04 عصر
وقتي يك بنده خدا محتواي كد رو نميفهمه از كجا تشخيص بده خوبه يا بد؟ اگه مخاطبان شما افراد حرفه اي هستند كه هيچ! اگه افراد مبتدي رو مخاطب قرار ميديد بايد همه چيز رو مد نظر داشته باشيد! پس در مثالهاتون از شبه كد استفاده كنيد تا دركش بهتر تر بشه ...

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

salehbagheri
سه شنبه 18 خرداد 1389, 23:51 عصر
بحثهاي بي ارتباط رو كجا بايد پست كرد؟

ميخواستم بگم كه اگه اين گفتگوهاي ارزشمند جاي پايي در مجله برنامه نويس داشته باشند فوق العاده ميشه...

حيف هست كه اين مطالب رو به صورت آفلاين نداشته باشيم.

آفلاين كمه بايد اين مطالب رو رو سنگ نوشت ...

YourWorldToday
چهارشنبه 19 خرداد 1389, 00:40 صبح
با سلام
جناب مداح در صورت امکان طریق تست کردن کد ها (Unit Test) را در برنامه نویسی با ASP.NET MVC را توضیح دهید
با تشکر

alawiala
چهارشنبه 19 خرداد 1389, 08:44 صبح
آقای کارگردان لطفاً مجددا دوربین رو این سمت بیارید... آها مرسی ممنون :)

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

بنده اگر جای برادر موسوی بودم، اسم interface رو ICar نمیگذاشتم. به نظر من نام IMobility بهتر هست.. یعنی هر چیزی که حرکت می کنه. منظور این نیست که مثلاً یک "مگس" هم توسط یک شرکت تولید میشه، منظور این هست که از واژه ای کلی تر استفاده بشه و پیش خود اینطور در نظر بگیری که منظور از IMobility یعنی "تمامی وسایل نقلیه ی قابل حرکت".

"تمامی وسایل نقلیه ی قابل حرکت" دو خصیصه ی "رنگ" و "مالک" و رفتارهای "ترمز" و "شروع حرکت" رو دارن... پس ICar محدود کننده است. حداقل در ذهن.

و اما... interface یک قالب کلی از خصیصه ها و رفتارهای خامی ایجاد می کنه که بعداً توسط کلاس هایی که اون رو پیاده سازی می کنن تغییر می کنه... من به interface ها میگم "یاد آور".

بعداً اگر قرار بر این بود که کلاسی برای دوچرخه یا موتورسیلکت داشته باشم، کلاسی با نام Bike ایجاد می کنم و اجزای IMobility رو برای اون پیاده سازی می کنم...

این طوری بسیار زیباتر خواهد بود...

در حقیقت interface بهت "یادآوری" می کنه که: "پسرم وسیله ی نقلیه ی تو حتما باید حداقل دو خصیصه ی "رنگ" و "مالک" و رفتارهای "ترمز" و "شروع حرکت" رو داشته باشه تا بتونی یک وسیله ی نقلیه حسابش کنی"

لطفاً جمله ی بالا رو 100 بار با دقت بخون ;)

موفق باشید :لبخندساده:

جمله آخر بسيار زيبا بود ، اگر جسارت بنده را بپذيريد چند مطلبي را اضافه مي كنم
يكي از كاربردهاي inteface وراثت چند گانه است ، آيا تا به حال به اين مورد برخورد كرده ايد كه يك كلاس چگونه مي تواند از دو كلاس بطور همزمان ارث ببرد .در اينجا برخي از خصوصيات inteface , و كلاس abstract را بطور خلاصه بيان مي كنم ، به نظرم در اين مورد تايپيك جدا گانه اي لازم داره

خصوصيات اينترفيس
1-كاربرد در بحث وراثت چندگانه
2-اينترفيس نمي تواند عملي را انجام دهد و صرفا يك چارچوب و قاعده براي كلاسها تعريف مي كند
3-سطح دسترسي توابع و متدهاي آن تابع سطح دسترسي خود اينترفيس است

اما كلاس abstract
1-فقط مي تواند يك كلاس آن را به ارث ببرد
2-توابع و متدهاي آن مي توانند عملياتي را انجام دهند
3-توابع و متدهاي آن مي توانند سطح دسترسي داشته باشند

و .........

اما در بحث كد نويسي به نظر من داشتن يك ديكشنري براي متغيرها بسيار ضروري است ، مثلا ممكن است در چند جا شما متغيري همنام استفاده كنيد كه باعث گيجي مي شود
به نظر من قبل از آغاز كار يك قاعده براي نام گذاري قرار دهيم و هر متغيري را در ديكشنري ذخيره كنيم به اين ترتيب كه اين متغير يا كلاس و يا تابع و متد در كجا بكار رفته و چه كارهايي را انجام مي دهد تا به هنگام تعريف تابع يا متغير جديد حداقل از همنام بودن جلوگيري شود

نمي دانم تا چه حد توانستم مطلب را برسانم

با تشكر فراوان از استادان بزرگوار

sia_2007
پنج شنبه 20 خرداد 1389, 22:18 عصر
دوست عزیز
طراحی به صورت

Interface >> Common Implementation >> Special Implementation

یکی از روش های خوب طراحیه

majidmjh
پنج شنبه 27 خرداد 1389, 23:43 عصر
سلام ،

اول یه پیشنهاد ، برای تشکر در قسمت بحث دربارۀ گفتگوی فنی پاسخ ارسال نکنیم که تعداد صفحات الکی بالا نره و بشه راحت تر مطالب رو دنبال کرد ، از دکمه تشکر استفاده کنیم .

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

ممنون . :قلب::قلب:

Mostafa_Dindar
جمعه 28 خرداد 1389, 01:07 صبح
سلام ،

اول یه پیشنهاد ، برای تشکر در قسمت بحث دربارۀ گفتگوی فنی پاسخ ارسال نکنیم که تعداد صفحات الکی بالا نره و بشه راحت تر مطالب رو دنبال کرد ، از دکمه تشکر استفاده کنیم .


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



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


به نظرم که خیلی ساده و روان توضیح میدند , منتها به نظر من فاصله زمانی بین پستها داره زیاد میشه , که از شکل یک تاپیک داغ فاصله میگیره .

شما میتونی هر اصطلاحی رو که متوجه نشدی اینجا مطرح کنی , اصلا این تاپیک واسه همین جور موارد ایجاد شده .

majidmjh
جمعه 28 خرداد 1389, 11:57 صبح
در این کد آقای موسوی اومدن GetGrandTotal() از کد اصلی جدا کردن ، این کار باعث شده که foreach دوبار توی تکرار بشه ، درسته که خوانایی برنامه بالاتر رفته و بوی بد کد کمتر شده ولی این باعث کند شدن برنامه نمی شه شاید مجبور بشیم این foreach رو صد بار تو برنامه صدا بزنیم ! اون وقت صد بار می خواد محاسبه کنه

بهتر نیست یه foreach باشه و این تابع ها توی اون تکرار بشه ، توی کد های من این اتفاق خیلی افتاده ... ممنون .



public void PrintInvoice()
{
PrintInvoiceHeader();

decimal grandTotal = GetGrandTotal();
PrintInvoiceDetails(grandTotal);
}

private void PrintInvoiceDetails(decimal grandTotal)
{
//Print invoice items and calculate the grand total...
foreach (Item item in this.items)
{
Console.WriteLine("Id: " + item.Id);
Console.WriteLine("Name: " + item.Name);
}

//Print the grand total
Console.WriteLine("Grand Total: " + grandTotal);
}

private decimal GetGrandTotal()
{
decimal result = 0;
foreach (Item item in this.items)
result += item.Price;

return result;
}

private void PrintInvoiceHeader()
{
//Print invoice header...
Console.WriteLine(this.invoiceId);
Console.WriteLine(this.customerName);
}


ویرایش :
ای کاش تا قبل از اینکه برم سربازی اینو جواب می دادید !! چون برام خیلی مهمه ! من سه شنبه صبح باید برم ... :'(

Saeed_m_Farid
یک شنبه 30 خرداد 1389, 12:10 عصر
بنده اگر جای برادر موسوی بودم، اسم interface رو ICar نمیگذاشتم. به نظر من نام IMobility بهتر هست.. یعنی هر چیزی که حرکت می کنه. منظور این نیست که مثلاً یک "مگس" هم توسط یک شرکت تولید میشه، منظور این هست که از واژه ای کلی تر استفاده بشه و پیش خود اینطور در نظر بگیری که منظور از IMobility یعنی "تمامی وسایل نقلیه ی قابل حرکت".


با عرض پوزش از آقای راد، ولی همینطوریش وقتی آقا صالح در مورد اصطلاحات ابهام دارن -یا از طرف بقیه صحبت می کنن-، فکر کنم تعمیم مساله حتی در این حد هم درست نباشه؛ صورت مساله Refactoring بود که آقای موسوی تمام تلاششون رو کردن تا با ساده ترین و در عین حال درست ترین زبان بیانش کنند.
البته شما استاد امثال بنده هستید ولی اگه بخواهیم در مورد ماهیت سولوشن صحبت کنیم، فکر کنم حالا حالاها در جا می زنیم :خجالت:؛ مثلاً IMobility هم میتونه IVehicle باشه، اونهم از IObject منشعب بشه و الا ماشا...
"وقتي يك بنده خدا محتواي كد رو نميفهمه از كجا تشخيص بده خوبه يا بد؟ اگه مخاطبان شما افراد حرفه اي هستند كه هيچ! "
آقای باقری، چرا بچه ها رو می ترسونی؟ مگه کدها چه محتوایی دارن که یه برنامه نویس معمولی، متوجه اش نشه؟ فقط اون آخراش آقای موسوی برای اینکه یکم لذت ببرن، یکم سازنده تو سازنده کردن، که هوشمندانه بوده و خوب برحسب تجربه های مکرر و بنظرم بهتره به چشم ما هم بخوره:
" به Class Diagram این کد نگاه کنید و از اون لذت ببرید"

اگه می شه آخر متن هایی که می نویسید ترجمه که نه ولی معادل فارسی یا اینکه این اصطلاح یعنی چه رو هم بنویسید ، مثل کتاب ها که برای کلمات سختشون * می ذارن ! :افسرده:
جالب بود.:لبخند:


در این کد آقای موسوی اومدن GetGrandTotal() از کد اصلی جدا کردن ، این کار باعث شده که foreach دوبار توی تکرار بشه ، درسته که خوانایی برنامه بالاتر رفته و بوی بد کد کمتر شده ولی این باعث کند شدن برنامه نمی شه شاید مجبور بشیم این foreach رو صد بار تو برنامه صدا بزنیم ! اون وقت صد بار می خواد محاسبه کنه ...

چه فرقی کرده مگه؟ فقط عوض اینکه همه تو یه تابع زیر هم ردیف بشن، به چند تابع شکسته شدند ولی تو ماهیت کار هیچ فرقی نیست! foreach بازاء هربار فراخوانی تابع GetGrandTotal اجرا میشه و داخل متغیر grandTotal ریخته میشه که اونهم فقط یکبار از تابع PrintInvoice فراخوانی میشه. یعنی در اون حالت که شما میگی: عوض اینکه 100 تا foreach زیر هم بنویسی؛ 100 بار متغیری که تابع مقداردهی کرده رو استفاده میکنی، فقط همین تفاوت هست.
مساله Performance که آقای موسوی در موردش صحبت میکنن، خیلی جزئی تر از اینی هست که شما در موردش صحبت میکنید، بیشتر به روال کامپایل توابع بر میگرده تا عملکرد کد و هیچوقت یک تابع معادل کدهای زیرهم، بیشتر از اون کد بو دار اجرا نمیشه. البته چون موضوع بحث اونجا عوض شده به خودم جسارت توضیح دادم، اساتید میبخشن.

Saeed_m_Farid
یک شنبه 30 خرداد 1389, 16:09 عصر
فکر کنم آقای موسوی اونقدر به ریز مسائل توجه شون معطوف شد که حوصله شون سر رفت، بابا دیگه اینهمه هم :گیج: نیستیم :




StyleCop (استایل کاپ تلفظ میشه، متاسفانه برخی اونو استایل کوپ تلفظ میکنن)
اکنون روی اولین خطا Double-Click کنید تا به رفع اون اقدام کنیم.
بالای تعریف کلاس، سه بار کلید / رو فشار بدید تا یک Summary Block خالی ایجاد بشه. سپس توضیح مورد نظر رو در درون Tag مزبور بنویسید.
برای این بخش، ابتدا روی نام پروژه در Solution Explorer کلید سمت راست Mouse رو بزنید و گزینه StyleCop Settings رو انتخاب کنید. سپس، پنجره Company Information رو انتخاب کنید و نام شرکت و Copyright مورد نظر رو اونجا وارد کنید

و ...

خدمت متولیان برنامه گفتگوی فنی شماره یک: ما داریم استفاده می کنیم؛ لطفاً ادامه بدین؛ البته مجری هم که فعلاً برنامه رو تعطیل کردن.:لبخندساده:
من چند تا نکته به ذهنم میرسه:

1) چرا Unit Testing و نیز MVC رو اینقدر خلاصه از روش گذشتید و نظر آقای موسوی رو نپرسیدین، در ضمن مثل اینکه اینا هم مثل مباحث UML هستن، نه؟ یعنی همه درموردشون صحبت میکنن ولی در عمل فقط در سطح همون حرف های قشنگ باقی میمونن! یا فکر کنم من درست توجیه نشدم؛ مثلاً Model، View، Controller و ... رو دیدم و خیلی شبیه UML و DFD و مستندسازی های مراحل هستند که اگه اینطوری باشه، آدم باید تمام پروژه ها رو بخوابونه که از اول همه چیز طراحی بشه؛ واقعاً لازمه که آدم برای آزمایش کد از این روال پیروی کنه؟ بعبارت دیگه همه که برنامه نویس وب یا دیتابیس نیستند و در پروژه های دیگه هم برای Unit Test اِ صحیح، لازمه که از این مباحث استفاده بشه یا روشهای استاندارد و عملی دیگه ای هم هست؟ چون بنده با یک مطالعه کوچک به Event هایی که Delegate ای براشون تعریف نشده و از EventHandler خود دات نت استفاده میکنند یا Singleton Pattern ها و مفاهیم چندریختی و ... توشون استفاده شده که حوصله برنامه نویسان رو شدیداً مورد آزمایش قرار میدن! منظورم اینه که اگه بخواهیم محیط توسعه مون بقول آقای موسوی، Brownfield نباشه ولی برای هر چیز جزئی هم نیاز به اينترفيس IModel و Observer و رویدادهای اطلاع رسانی و ... نداشته باشیم باید چکار کنیم؟ اینا بیشتر توسعه دهنده رو فراری میدن تا ترغیب به تمیزی/نظافت یا بوی خوب کد.
خوب اگه قرار باشه اینهمه پیچیدگی بیاد سمت برنامه نویس، پس صد و خرده ای مگ برای پلت فرم دات نت رو برای چی رو سرورهامون نصب می کنیم؟ با همون ++C/C کدهامونُ می نوشتیم دیگه :لبخند:

2) Divergent Change (تغییر واگرا) و Shotgun Surgery رو میشه بیشتر توضیح بدین؟ من نوعی تو برخی کدهام، فکر میکنم که درست تر از این دیگه نمیشه و از زمان و وقتم هم هزینه میکنم و دنبال کدهای تمیز مشابه و قابل استفاده برای نمونه می گردم و ... ولی باز هم - علیرغم دقت اولیه- طی زمان همچین مشکلاتی شبیه اون چیزی که آقای موسوی فرمودن برام پیش میاد. اینا دیگه Refactoring نیستند که تو توسعه نهایی سیستم تاثیری نداشته باشند؛ باید هزاران خط کد از اول بهینه سازی بشه یا دید توسعه دهندگان سیستم عوض بشه و بردارن تمام اجداد کلاسها رو بهینه نویسی کنند که اونهم معلوم نیست بازم Refused Bequest بشن یا نه! اینا واقعاً تو پروژه هایی که پرونده شون مثلاً بسته شده و تغییرات جزئی میخوان هزینه بر و اعصاب خوردکن هست؛ چه راه حلی پیشنهاد می کنید؟ یا بنظرتون از این به بعد چی کار کنیم بهتره؟

خیلی از به اشتراک گذاشتن تجربیات ارزشمند خودتون تشکر میکنم.

naeeme
سه شنبه 01 تیر 1389, 12:55 عصر
StyleCop صرفا برای #C هست یا برای کدهای VB.Net هم کاربرد داره؟

Behrouz_Rad
سه شنبه 01 تیر 1389, 13:05 عصر
StyleCop صرفا برای C#‎‎ هست یا برای کدهای VB.Net هم کاربرد داره؟
فقط برای C#‎ هست... البته از "برخی" رهنمون هایی که میده می تونی ایده بگیری و در VB هم پیاده سازی کنی.

موفق باشید.

saed2006
سه شنبه 01 تیر 1389, 17:20 عصر
فقط برای C#‎‎ هست... البته از "برخی" رهنمون هایی که میده می تونی ایده بگیری و در VB هم پیاده سازی کنی.

موفق باشید.

سلام اقا بهروز
من دلیل بعضی رهنمود هاشو نفهمیدم
مثلا اینکه اسم متغیر با حرف بزرگ شروع نشه یا اکثر مواقع پیشنهاد میده متغیر از نوع var تعریف بشه دلیل این ها چیه؟
ممنون

vcldeveloper
سه شنبه 01 تیر 1389, 17:40 عصر
StyleCop صرفا برای C#‎ هست یا برای کدهای VB.Net هم کاربرد داره؟
البته سوال شما مربوط به Visual Studio هست، و در این بحث هم مثال های ارائه شده مربوط به #C و Visual Studio 2010 هستند؛ اما اگر دوستانی از سایر IDEها استفاده می کنند، می تونند معمولا امکانات مشابه قابلیت های مطرح شده در این تاپیک را در IDEهای مورد استفاده خودشان هم پیدا کنند.

به عنوان نمونه؛ دوستانی که از RAD Studio (برای دلفی و C++ Builder) استفاده می کنند، می تونند با استفاده از گزینه Refactoring، در Context menu مربوط به Code Editor، یا استفاده از منوی Refactor، عمل Refactoring را انجام بدند:
51625

برای قابلیتی مشابه StyleCop، هم می تونند از منوی Project گزینه QA Audits را انتخاب کنند، و برای این کار نیاز به نصب ابزار جانبی نیست:
51626

در IDEهای دیگه هم ممکنه بتونید این قابلیت ها را پیدا کنید، یا با استفاده از ابزارهای جانبی، این قابلیت ها را به IDE مورد نظرتان اضافه کنید.

Behrouz_Rad
سه شنبه 01 تیر 1389, 19:40 عصر
سلام اقا بهروز
من دلیل بعضی رهنمود هاشو نفهمیدم
مثلا اینکه اسم متغیر با حرف بزرگ شروع نشه یا اکثر مواقع پیشنهاد میده متغیر از نوع var تعریف بشه دلیل این ها چیه؟
ممنون
اینها به همون قواعد نامگذاری بر میگرده که برادران موسوی و مداح در مورد برخی از اونها توضیح دادند.
استفاده از var رو فقط برای Anonymous Types پیشنهاد می کنم. زمانی که نوع متغیر یا شی ای رو می دونید، از var استفاده نکنید چون باعث کاهش خوانایی برنامه میشه.

موفق باشید.

Sajjad.Aghapour
شنبه 05 تیر 1389, 15:57 عصر
سلام اقا بهروز
من دلیل بعضی رهنمود هاشو نفهمیدم
مثلا اینکه اسم متغیر با حرف بزرگ شروع نشه یا اکثر مواقع پیشنهاد میده متغیر از نوع var تعریف بشه دلیل این ها چیه؟
ممنون

سلام.
ببخشید سوال منحصر به شخص خاصی بود ولی گفتم جواب بدم..

پیشنهاد میکنم Documentation این ابزار رو هم دانلود کنید که دلیل وجود چنین قوانینی رو در اون کاملا توضیح داده.
مثلا برای همین سوال که اسم متغیر با حروف بزرگ نمایش داده نشه این جواب رو داره:


A violation of this rule occurs when the name of a field or variable begins with an upper-case letter. Field and variable names must begin with a lower-case letter, unless the field is public or internal, const, or non-private and readonly. In these cases, the field should begin with an upper-case letter.

If the field or variable name is intended to match the name of an item associated with Win32 or COM, and thus needs to begin with an upper-case letter, place the field or variable within a special NativeMethods class. A NativeMethods class is any class which contains a name ending in NativeMethods, and is intended as a placeholder for Win32 or COM wrappers. StyleCop will ignore this violation if the item is placed within a NativeMethods class.

Mostafa_Dindar
سه شنبه 08 تیر 1389, 23:02 عصر
Design Guidelines for Developing Class Libraries (http://msdn.microsoft.com/en-us/library/ms229042.aspx) عنوان مجموعه ای هست که بعضی از قسمتهای اون تقریبا مرتب با موضوعات تاپیک هست که خوندنش قطعا مفید خواهد بود . به گفته خودشون :


It is strongly recommended that you follow these design guidelines when developing classes and components that extend the .NET Framework. Inconsistent library design adversely affects developer productivity and discourages adoption.
Guidelines for Names (http://msdn.microsoft.com/en-us/library/ms229002.aspx)Describes guidelines for naming types and members in class libraries.
Type Design Guidelines (http://msdn.microsoft.com/en-us/library/ms229036.aspx)Describes guidelines for using static and abstract classes, interfaces, enumerations, and structures.
Member Design Guidelines (http://msdn.microsoft.com/en-us/library/ms229059.aspx)Describes guidelines for designing and using properties, methods, constructors, fields, events, and operators. This section also describes best practices for designing parameters.
Designing for Extensibility (http://msdn.microsoft.com/en-us/library/ms229028.aspx)Describes guidelines for designing libraries that can be extended.
Design Guidelines for Exceptions (http://msdn.microsoft.com/en-us/library/ms229014.aspx)Describes design guidelines for designing, throwing, and catching exceptions.
Usage Guidelines (http://msdn.microsoft.com/en-us/library/ms229035.aspx)Describes guidelines for using arrays and attributes, and guidelines for implementing equality operators.


Internal Coding Guidelines (http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx)هم مقاله ای هست که به صورت خلاصه مواردی دیگری رو پیشنهاد میکنه .

Rejnev
سه شنبه 15 تیر 1389, 19:06 عصر
یک سوال کوتاه:
قشنگتره که پراپرتی های کلاس رو کجای ادیتور بنویسیم؟
یعنی ترتیب تعاریف اجزا، مثلا:
اول سازنده
بعد پراپرتی ها
بعد متدها
----یا
اول پراپ ها
بعد سازنده
بعد متد ها
آخر سر هم مخرب کلاس و...
کدوم یکیش؟
اینطوری خوبه؟



calss x
{
constructor(){}
props;
methodes(){}
~destructor(){if needed}
}



:بوس:

Mostafa_Dindar
چهارشنبه 23 تیر 1389, 22:31 عصر
قرار نیست گفتگوی بعدی رو شروع کنید ؟

در یک ماه اخیر آقای مداح تنها یک پست در این تاپیک داشتند , فکر نمیکنید اینو تمومش کنید بهتره ؟