PDA

View Full Version : اصول صحیح کد نویسی



mamizadeh
یک شنبه 21 بهمن 1386, 11:40 صبح
با سلام خدم دوستان
شما رو نمی دونم ولی واسه من که خیلی اتفاق افتاده که برنامه ای را با اصول مهندسی طی سه تا چهار ماه نوشتم و برنامه را به مشتری ارائه دادم و بعد از اون چند برنامه دیگری را هم نوشتم ولی بعد از مدتی که خواستم کد یکی از برنامه ها را تغییر بدم بعضی از قسمت ها کد یادم میره که چرا این طوری نوشتم (البته اصول تجزیه تحلیلش رو نمیگم منظورم کد نویسی هستش)
خلاصه....
به نظرات جنابعالی چه اصولی را در کد نویسی باید انجام داده که هر کسی که از در برسه و کمی از کد نویسی سر دربیاره و کد ما رو ببینه بفهمه که فلان قسمت از کد واسه چیه و به کدوم قسمت از مستندات تحلیل ربط داره
مثلا نظر من
1-استفاده از بخش های توضیحات در برنامه نویسی هستش که برای تمام زیر برنامه ها باید نوشت
2- تا حدی که در توان داریم در کلاس اصلی برنامه نباید از کد هایی که عملیاتی را انجام می دن استفاده کنیم بلکه باید کلاسی را ایجاد کرده و اونا رو به صورت یه زیر برنامه تو اون کلاس بنویسیم(البته تا حد ممکن باید با کلاس های دیگه باید رابطش در حد اقل باشه) و از اونا استفاده کنیم مزیتش اینه که در کلاس اصلی کدمون خوانایی بیشتری داره و ... (مزایایه دیگری هم داره که نمی خوام زیاد طولش بدم)
حلا نظر دوستان چیه؟
با تشکر از همه دوستان:چشمک:

رضا عربلو
یک شنبه 21 بهمن 1386, 18:50 عصر
برای شناسه هایتان اسامی با معنی انتخاب کنید.
تا حد ممکن سعی کنید از یک اسلوب خاص برای کد نویسی خود استفاده کنید. (برای مثال متغییر بولین تان را به صورت boolIsEmpty تعریف کنید بهتر استو ...)
encapsulation را فراموش نکنید (یعنی کاربر نوع تان بتواند بدون دانشسن نحوه پیاده سازی نوع تان با آن به راحتی کار کند)
دندانه کردن کدتان به خوانده شدن آن کمک می کند.
از XML Documentation برای توضیح memberهای نوع تان استفاده کنید (مثلاً چه عملی انجام می دهد، چه پارامترهای می گیرد و ...)
....
و آخر سر هم من هم وقتی به برنامه ای که پنج سال پیش رجوع می کنم با مشکل مواجه می شوم که چرا این کار را اینجوری انجام دادم و این جای خوشحالی دارد چون یعنی توی این مدت چیزهای بیشتری یاد گرفته ام.

Mahdi.Kiani
یک شنبه 21 بهمن 1386, 23:43 عصر
برای شناسه هایتان اسامی با معنی انتخاب کنید.
تا حد ممکن سعی کنید از یک اسلوب خاص برای کد نویسی خود استفاده کنید. (برای مثال متغییر بولین تان را به صورت boolIsEmpty تعریف کنید بهتر استو ...)
encapsulation را فراموش نکنید (یعنی کاربر نوع تان بتواند بدون دانشسن نحوه پیاده سازی نوع تان با آن به راحتی کار کند)
دندانه کردن کدتان به خوانده شدن آن کمک می کند.
از XML Documentation برای توضیح memberهای نوع تان استفاده کنید (مثلاً چه عملی انجام می دهد، چه پارامترهای می گیرد و ...)
....
و آخر سر هم من هم وقتی به برنامه ای که پنج سال پیش رجوع می کنم با مشکل مواجه می شوم که چرا این کار را اینجوری انجام دادم و این جای خوشحالی دارد چون یعنی توی این مدت چیزهای بیشتری یاد گرفته ام.

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

رضا عربلو
دوشنبه 22 بهمن 1386, 01:39 صبح
اوردن نوع تایپ در اسامی الزام آور نیست. و صرفاً یک صلیقه است که از یک اسلوب کد نویسی گرفته شده است. و هدف من از اوردن ان این بوده اسن که همواره از یک صلیغه در کد نویسی تان استفاده کنید.
و ی توانه در خواندن کد کمک کنه، مضافاً بر اینکهدر هنگام کد نویسی می تونه به کمک ابزار InteliSense بیاد مثلاً من می دونم که به دنبال یک تکست باکس هستم و از طرفی همه تکیت باکس هام با txbox شروع می شوند خوب کافی بنویسم this.txbox و بعد کنترۀ + SpaceBar را بزنم، یک لیست خیلی جمع و جور در جلوتون ظاهر می شه.

sinpin
دوشنبه 22 بهمن 1386, 11:28 صبح
لینک زیر هم (روشهای استاندارد در نامگذاریها و ظاهر کدنویسی) شاید بد نباشه :
استاندارد کد بنویسیم (http://barnamenevis.org/forum/showthread.php?t=82709)

tiktikboom
دوشنبه 22 بهمن 1386, 20:36 عصر
من با سابقه کاری کمی که نسبت به شما عزیزان داشتم متوجه شدم با وجود رعایت کلاس بندی ها و استفاده از حروف اختصار و حتی کامنتهای طولانی و اصول دیگه ای که برای کدنویسی استاندارد مطرحه باز هم با مشکل در فهم مجدد کد رو برو میشم.
بنا براین باید بگم که اگر استانداردی برای کدنویسی کلی وجود داره استانداردی هم برای کدنویسی جمعی یا انفرادی وجود داره. به این صورت که شما شکل فرم ها ، نحوه ی قرار گرفتن کلید ها ، رویه ها و دیگر اجزای برنامه رو بصورت یک استاندارد کلی برای تمام برنامه هاتون بسازید. فراموش نکنیم که یکی از امکانات زبان سی شارپ ارث بری اونه. پس براحتی میتونین برای فرمهایی که در حال ساخت اون هستن از استاندارد های خودتون استفاده کنین. بعنوان مثال فرمی که در اون یکی دیتا گرید جای داره معمولا 4 کلید ناویگیتور هم داره. برنامه نویسی به این فرم ممکنه در ابتدا مشکل باشه اما بعدا متوجه میشید هم سرعت بالایی در کد نویسی نصیبتون میشه و هم برای فهم مجدد دچار دردسر نمیشید. این کار برای کلاس های شما هم کاربرد داره. با استفاده از استاندارد شخصی خودتون و همینطور بهره گیری از روش های استاندارد کد نویسی تا حد امکان از بوجود اومدن چنین مشکلاتی جلوگیری میشه.

jghalai
سه شنبه 23 بهمن 1386, 18:13 عصر
تمام چیزهایی که دوستان اشاره کردن همه کاملا درستن . ولی من معتقدم حتی اگه تمام این موارد هم رعایت بشه باز هم مشکل کاملا حل نمیشه . و تنها راه حل کامل برای این مشکل داشتن یه تجزیه و تحلیل خوب با مستندات کافی هست. تا بعدا با استفاده از این مستندات بتونیم خیلی راحت از کدهای نوشته شده سر در بیاریم .

mamizadeh
دوشنبه 29 بهمن 1386, 15:19 عصر
به فرض هم که از اسمش درست نشه متوجد شد، از XMLDocument ها که استفاده بشه فکر نمی کنم دیگه مشکلی پیش بیاد.. البته اگر درست و کامل بتونی ازش استفاده کنی
دوست گرامی منظور شما از XMLDocument دقیقا چیه ؟ میتونید بیشتر توضیح بدید آیا همون فایل های xml هستش که ایجاد می کنیم اگر اینه چه ربطی به خانایی کد ما داره و اگر منظور مبارکتان چیز دیگری است بیشتر توضیح دهید تا بیشتر روشن شوم
با تشکر

mamizadeh
دوشنبه 29 بهمن 1386, 15:20 عصر
تمام چیزهایی که دوستان اشاره کردن همه کاملا درستن . ولی من معتقدم حتی اگه تمام این موارد هم رعایت بشه باز هم مشکل کاملا حل نمیشه . و تنها راه حل کامل برای این مشکل داشتن یه تجزیه و تحلیل خوب با مستندات کافی هست. تا بعدا با استفاده از این مستندات بتونیم خیلی راحت از کدهای نوشته شده سر در بیاریم .
دوست گرامی تحلیل برامه را با رشنال انجام دادیم مشکل ما در نحوه صحیح نوشتاری کد هستش

Mahdi.Kiani
دوشنبه 29 بهمن 1386, 16:27 عصر
دوست گرامی منظور شما از XMLDocument دقیقا چیه ؟

به طور خیلی ساده میشه، اونا را مانند توضیحاتی در برنامه دانست. من به اونا می گم توضیحات هوشمند. :چشمک: دلیلش هم اینه که این نوع توضیحات مشخص هستند که مربوط به چه تکه کدی هستند.

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




public class test
{


public test(){}

*
public int add (int a,int b)
{

return a+b;

}

}




حالا درست بالای متد ، یهنی جایی که * هست، سع عدد / پشت سر هم بزن.بعد ببین چه اتفاقی میفته.
با این کار خودت متوجه می شی که xml Document ها چی هستند و یه چه دردی می خورن.

حتما تا بحال موقع استفاده از یک چیزی درون دات نت متوجه شدی که دات نت برات یه سری چرت و پرت هایی در قالب یک tooltip برات می نویسه. مثلا برای یک متد می نویسه که پارامتر اول چی هست و چه مقادیری می تونه داشته باشه و یا اینکه این متد یا هر چیز دیگه ای ممکن است که چه exception هایی تولید کنه ویه سری اراجیف دیگه که به درد می خورن :چشمک:


مثلا بعد از اون عمل خارق العاده ای که گفتم (سه تا / ) ، شکل کلاس به صورت زیر میشه






public class test
{

public test() { }
/// <summary>
/// اینجا می تونی یه سری اراجیف بنویسی که موقع استفاده از این متد نشونت خواهد داد
/// </summary>
/// <param name="a"> اینجا می تونی بنویسی که پارامتر a کیه و...</param>
/// <param name="b">اینجا هم برای پارامتر b</param>
/// <returns>در مورد برگشت تابع هم می تونی یه سری چیزایی بنویسی</returns>
public int add(int a, int b)
{
return a + b;
}
}




دو تا عکس هم در هنگامی که از این متد استفاده کردم ، گرفتم و برات گذاشتم.
موفق باشید

Mahdi.Kiani
دوشنبه 29 بهمن 1386, 16:29 عصر
بعدا می تونی این توضیحات را به خروجی بفرستی و نگهشون داری....
همانطور که می بینی شکل این توضیحات مانند ساختار فایل های xml که دارای element و .. هستند، می باشد
این نوع document ها خصوصا مواقعی که می خواین یه کنترلی را بنویسین و deploy کنید به درد می خوره. اینطوری اون کاربری که از کلاس یا متد های شما استفاده می کنه، می فهمه که هر چیزی در کنترل شما به چه دردی می خوره و کارش چیه و ....

جهت اطلاعات بیشتر => سرچ

amir_saniyan
دوشنبه 29 بهمن 1386, 17:19 عصر
به شدت و با تاکید بسیار توصیه می‌کنم که حتما توصیه‌های مایکروسافت رو برای کد نویسی در محیط دات نت بخونید: خیلی جالب و کامله:

http://msdn2.microsoft.com/en-us/library/ms229042.aspx