PDA

View Full Version : ویژگی های یک برنامه خوب چی هست ؟



jas1387
دوشنبه 09 فروردین 1389, 18:11 عصر
سلام به دوستان

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

اصول یه برنامه حرفه ای چیست ؟

FastCode
دوشنبه 09 فروردین 1389, 20:02 عصر
طراحی درست
کد قابل اطمینان
پرهیز از spaghetti
استفاده نکردن از روش های HACKY
استفاده از Well Defined Interfaces
استفاده از Listهای generic و استفاده نکردن از System.Object
استفاده از Interface ها به جای Delegate
MicroOptimize کردن هنگام کد نویسی.
Parallel Computing
و خیلی چیز های دیگه.
استفاده نکردن از اشیایی مثل System.Data.DataSet حتی اگر ساده ترین کار را 1 سال به تاخیر بیاندازد.

naser2009
دوشنبه 09 فروردین 1389, 20:04 عصر
سلام دوسته من
اکیدا پیشنهاد میکنم
1) از برنامه نویسی چند لایه(ui,dal,bll) استفاده کنید (لایه ها رو به صورت کاملا مجرد طراحی کنین که اگر بتونید این کار رو انجام بدید سریعا میتونید win app رو به web app تبدیل کنید)
2) حتما شی گرایی را رعایت کنید
3) سعی کنید اگر میتونید گروهی کار کنید
4) برنامتون در صورت امکان portable باشه
5) Exception handeling که اصلا یادتون نره....
و هزاران نکته دیگه....:تشویق:

FastCode
دوشنبه 09 فروردین 1389, 20:29 عصر
Exception handeling که اصلا یادتون نره....
کاملا" اشتباهه.

برنامه شما باید کاملا" جلوی Exception ها رو بگیره نه اینکه اونها رو Handle کنه.
مگه Exception ایونت هست که Handle بشه.

در ضمن من این کار رو کردم و میگم که میشه.

بزار از خودم بگم:
من توی 1000000 خط بیشتر از 30 بار از دستور Try Catch ... هم استفاده نکردم و برنامم بدون Exception Handling داره کار میکنه و نسخه Beta1 اون هنوز Exception نداشته.:بامزه:

اما با بقیه فرمایشات شما کاملا موافقم.

چون توی ایران 200% برنامه ها با دیتابیس کار میکنن حتما" برای درست کردن یک چیز متمایز برنامه ای بنویسید که بتونه CrossDatabase باشه.

Salah Sanjabian
دوشنبه 09 فروردین 1389, 21:42 عصر
طراحی درست

استفاده نکردن از اشیایی مثل System.Data.DataSet حتی اگر ساده ترین کار را 1 سال به تاخیر بیاندازد.
دوست عزیز میشه بگی چرانباید از Dataset استفاده کرد؟
شاید تو برنامه های ٌWinApp بیشتر Entity هاپاس داده میشن. ولی تو شبکه بیشتر از روش Disconnectt و آبجکت های اون استفاده میشه.
اگه اشتباه میگم لطفا توضیح بدین

mehdi.mousavi
دوشنبه 09 فروردین 1389, 23:00 عصر
کاملا" اشتباهه. برنامه شما باید کاملا" جلوی Exception ها رو بگیره نه اینکه اونها رو Handle کنه. مگه Exception ایونت هست که Handle بشه.

سلام.
Exception Handling یعنی "تعامل با Exception" ها. چی کاملا اشتباهه؟ من نمیدونم شما از این عبارت چی برداشت کردید، اما منظور از Exception Handling اینه که برنامه برای تعامل با خطاهای احتمالی، "برنامه ریزی" شده باشه و با "شرایط از پیش تعیین نشده" روبرو نشه. والا اینی که شما تو دو نقطه از کد این تعامل با خطاها رو داشته باشید، یا تو 30 نقطه، به Solution انتخابی شما بر میگرده.

طبیعتا استفاده از Framework ای برای تعامل صحیح و برنامه ریزی شده با این خطاها، انتخاب بسیار بهتری هستش که Exception Handling Block از Enterprise Library ابزارهای بسیار خوبی برای اینکار در اختیار برنامه نویس قرار میده.

موفق باشید.

naser2009
دوشنبه 09 فروردین 1389, 23:16 عصر
طراحی درست
کد قابل اطمینان
پرهیز از spaghetti
استفاده نکردن از روش های HACKY
استفاده از Well Defined Interfaces
استفاده از Listهای generic و استفاده نکردن از System.Object
استفاده از Interface ها به جای Delegate
MicroOptimize کردن هنگام کد نویسی.
Parallel Computing
و خیلی چیز های دیگه.
استفاده نکردن از اشیایی مثل System.Data.DataSet حتی اگر ساده ترین کار را 1 سال به تاخیر بیاندازد.
سلام شما از عبارت های جالبی استفاده کردی ولی بهتر بود واسه هر کدوم یه دلیل میوردی
در ضمن فکر می کنم شما عبارته Exception handling رو درست متوجه نشدی!

FastCode
سه شنبه 10 فروردین 1389, 00:07 صبح
سلام شما از عبارت های جالبی استفاده کردی ولی بهتر بود واسه هر کدوم یه دلیل میوردی
اگر اشتباه بود آقای موسوی پستم رو با مسلسل سوراخ سوراخ میکرد.
طراحی درست:فکر میکنم علتش اینه که اگر این کار رو انجام ندی حداقل باید سه بار برنامه رو بنویسید.
کد قابل اطمینان:هرگز کدی رو که بهش شک دارید ننویسید چون ممکنه در بدترین حالت خطا درست کنه.
پرهیز از spaghetti:این یکی رو همه میدونن چرا
استفاده نکردن از روش های HACKY:بخاطر اینکه:1.اگر کسی کد شما رو ببینه ممکنه چیزی ازش نفهمه 2. معمولا" این روشها سرعت رو کاهش میدن
استفاده از Well Defined Interfaces:برای افزایش سرعت کد نویسی مثلا" کلاس مشتری و کلاس پرسنل هر دو از بک Interface به اسم مثلا" ICodeName ارثبری کنن.
استفاده از Listهای generic و استفاده نکردن از System.Object:جلوگیری از Boxing/UnBoxing
استفاده از Interface ها به جای Delegate:چون delegate ها خیلی کندتر عمل میکنن
MicroOptimize کردن هنگام کد نویسی:چون هرگز نمیتونی تمام برنامه رو دوباره بخونی و optimize کنی و بهتره که کار رو از اول درست انجام بدی
Parallel Computing:خوب این یکی هم معلومه:http://en.wikipedia.org/wiki/Parallel_computing
CrossDatabase:مثلا" اگر برنامه شما server/client هست ولی روزی خواستید نسخه singleUser اون رو هم تولید کنید باید بتونید که بانک رو در 5 دقیقه از Sql به SqLite تبدیل کنید.

jas1387
سه شنبه 10 فروردین 1389, 00:28 صبح
سلام دوستان عزیز

از این که وقت گذاشتید و جواب دادید ممنونم اما من یه اشتباهی کردم و نگفتم که مبتدی هستم ( اول که خودم این چنین فکر نمی کردم حالا با این اصطلاحاتی که شما گفتید فهمیدم ، من برنامه نویسی رو تو ارتباط با دیتابس چندتا insert و delete تازه ناقص می دیدم ) اگه بگم بیشتر چیزهای که گفتید را نگرقتم چی می گید ؟

حتی "پرهیز از spaghetti:این یکی رو همه میدونن چرا" این هم نمی دونم ، راستی چی هست ؟

ممنون میشم مرا راهنمایی کنید

Amir Oveisi
سه شنبه 10 فروردین 1389, 02:01 صبح
از اسمش مشخصه دوست عزیز. یعنی کدتون مثل اسپاگتی در هم بر هم و بی در و پیکر نباشه.

mrsalam
سه شنبه 10 فروردین 1389, 07:54 صبح
دوستان موضوع جالبی اشاره کردن, ولی کاش برای ما که مبتدی هستیم برای ایتم های که گفتن ، منابعی ذکر می کردن

jas1387
سه شنبه 10 فروردین 1389, 09:31 صبح
دوستان موضوع جالبی اشاره کردن, ولی کاش برای ما که مبتدی هستیم برای ایتم های که گفتن ، منابعی ذکر می کردن

من نیز امیدوارم که منابعی (فارسی) معرفی کنند (انشاا...)

mahmoodramzani
سه شنبه 10 فروردین 1389, 10:28 صبح
استفاده از Interface ها به جای Delegate:چون delegate ها خیلی کندتر عمل میکنن


از نسخه ۲ به بعد دات نت Delegate ها با سرعتی تقریبا برابر با سرعت فراخوانی مستقیم یک تابع اجرا میشن،پس این عبارت اشتباهه.
در ضمن به نظرم برنامه نویسی multi thread بدون Delegate کاملا بی معنی هستش.

mahmoodramzani
سه شنبه 10 فروردین 1389, 14:06 عصر
کاملا" اشتباهه.

برنامه شما باید کاملا" جلوی Exception ها رو بگیره نه اینکه اونها رو Handle کنه.
مگه Exception ایونت هست که Handle بشه.

در ضمن من این کار رو کردم و میگم که میشه.

بزار از خودم بگم:
من توی 1000000 خط بیشتر از 30 بار از دستور Try Catch ... هم استفاده نکردم و برنامم بدون Exception Handling داره کار میکنه و نسخه Beta1 اون هنوز Exception نداشته.:بامزه:


دقیقا و دقیقا و دقیقا exception ها باید handle بشن.این یکی از concept های برنامه نویسی هست و و عبارت درستش هم همین Exception Handling هست.

http://en.wikipedia.org/wiki/Exception_handling

jas1387
سه شنبه 10 فروردین 1389, 18:04 عصر
سلام دوستان

آقا یکی بیاید و این برنامه سه لایه را کامل توضیح بده ، من بیشتر شنیدم که توی برنامه نویسی وب استفاده میشه ولی آیا توی برنامه نویسی تحت ویندوز هم کاربرد داره ؟

FastCode
سه شنبه 10 فروردین 1389, 19:17 عصر
من بیشتر شنیدم که توی برنامه نویسی وب استفاده میشه
پس چرا من عکسش رو شنیدم؟و انجام دادم؟

شما میتونید توی گوگل کلماتی مثل DAL و UI و... رو جست وجو کنید و کاملا" موضوع رو بفهمید.ببخشید که توضیح نمیدم, بحثش یکم طولانیه.

mehdi.mousavi
سه شنبه 10 فروردین 1389, 20:39 عصر
سلام دوستان آقا یکی بیاید و این برنامه سه لایه را کامل توضیح بده ، من بیشتر شنیدم که توی برنامه نویسی وب استفاده میشه ولی آیا توی برنامه نویسی تحت ویندوز هم کاربرد داره ؟

سلام.
برنامه نویسی سه لایه، در مورد جداسازی لایه ها بصورت فیزیکی (tier) یا جداسازی لایه ها بصورت منطقی (layer) صحبت میکنه. اینکه از این روش در برنامه های Web استفاده کنید، یا برنامه های Desktop ربطی به مساله پیدا نمیکنه.

بعنوان یه قانون کلی، شما باید از بهترین الگوها توی هر برنامه ای که به اون الگو نیاز بود، استفاده کنید. خواه Web App باشه، خواه Desktop App. فقط برای روشن مطلب این سوال رو طرح میکنم: آیا فرقی میکنه شما از Singleton Pattern ها در چه نوع نرم افزارهایی استفاده کنید؟ طبیعتا خیر. هر جا نیاز به این الگو باشه، شما اینکارو باید انجام بدید. حتی توی هر زبان برنامه نویسی...

موفق باشید.

mohammad_2039
چهارشنبه 11 فروردین 1389, 11:05 صبح
یکی از دوستان تو این پست http://barnamenevis.org/forum/showthread.php?t=201326 یه برنامه چند لایه رو از ابتدا با کد توضیح دادن:تشویق:. بد نیست یه نگاهی بندازی:لبخند:

jas1387
چهارشنبه 11 فروردین 1389, 17:32 عصر
سلام

در معماری سه لایه که بالا صحبت شد بهتره که لایه در پوشه های جداگانه باشند یا اینکه در پروژه های جداگانه و چرا ؟

FastCode
دوشنبه 16 فروردین 1389, 19:53 عصر
به نظرم برنامه نویسی multi thread بدون Delegate کاملا بی معنی هستش
نظرتون راجع به این چیه:

Thread t = new Thread(proc_a)//1 delegate call
void proc_a()
{
//do lot's of stuff
}
-------------------
int[] a = myList.FindAll((item) => { return item > 0; } );

mahmoodramzani
سه شنبه 17 فروردین 1389, 09:13 صبح
نظرتون راجع به این چیه:

Thread t = new Thread(proc_a)//1 delegate call
void proc_a()
{
//do lot's of stuff
}
-------------------
int[] a = myList.FindAll((item) => { return item > 0; } );


خوب همین جا هم باز از delegate استفاده شده که.میگم که برنامه نویسی multi thread بدون delegate بی معنی هست.
هرچند اینجا ما ۰.۵ ثانیه تاخیر داریم ولی دلیلش استفاده از delegate نیست.دلیلش اینه که ایجاد یک thread جدید هزینه داره

FastCode
سه شنبه 17 فروردین 1389, 14:16 عصر
خوب همین جا هم باز از delegate استفاده شده که.میگم که برنامه نویسی multi thread بدون delegate بی معنی هست.
هرچند اینجا ما ۰.۵ ثانیه تاخیر داریم ولی دلیلش استفاده از delegate نیست.دلیلش اینه که ایجاد یک thread جدید هزینه داره

0/5 نه 0/005 دوست عزیز.
دوما" منظور من این بود که یک بار اشکال نداره ولی استفاده از اون در جاهایی که میشه این کار رو نکرد خیلی بده.

در ضمن راه های بهتری هم برای thread هست.

mahmoodramzani
سه شنبه 17 فروردین 1389, 19:31 عصر
0/5 نه 0/005 دوست عزیز.
دوما" منظور من این بود که یک بار اشکال نداره ولی استفاده از اون در جاهایی که میشه این کار رو نکرد خیلی بده.

در ضمن راه های بهتری هم برای thread هست.
دقیقا 500ms .
خوب شما بدون delegate چطور callback می نویسی؟چطور event می نویسی؟
مگه اینکه از اینها استفاده نکنی اصلا!!!

FastCode
سه شنبه 17 فروردین 1389, 22:48 عصر
دقیقا 500ms .
خوب شما بدون delegate چطور callback می نویسی؟چطور event می نویسی؟
مگه اینکه از اینها استفاده نکنی اصلا!!!

من توی آخرین برنامم همزمان 63 تا ترد رو اجرا میکنم(توسط main-thread) و تمام یک پروسه وقت گیر رو توی 730 میلی ثانیه انجام میدم و به شما قول میدم که اگر 500 میلی ثانیه دزست باشه نمیتونم اون کار رو توی 73 ثانیه انجام بدم.
در ضمن نظرتون راجع به این API چیه؟(به پ.ن. های اون صفحه هم یه نگاهی بندازید.)
http://msdn.microsoft.com/en-us/library/ms682453(v=VS.85).aspx

FastCode
پنج شنبه 19 فروردین 1389, 21:04 عصر
callback :
استفاده از WaitHandle
event :
استفاده از partial method

در ضمن من فقط و فقط در UI از event استفاده میکنم.