PDA

View Full Version : گفتگو: شروع به کار در یک تیم (گروه) حرفه ای توسعه نرم افزار .net و C#



iman_pc_love
پنج شنبه 11 اسفند 1390, 16:31 عصر
با سلام
حدود 6 سال پیش به صورت پروژه ای ( پروژه های کوچک در حد یک فروشگاه و یک کامپیوتر) با VB کار می کردم، البته تنهایی و به صورت سر خود، یعنی استخدام جایی نبودم. و یا پروژه های دانشجویی انجام می دادم، سایت طراحی می کردم ASP.net یا php ولی چون می خواستم برای کنکور فوق لیسانس شرکت کنم و از اونجایی هم که بیشینه تحصیلی خوبی نداشتم این شد که در طول دوران "کاردانی به کارشناسی" دیگه کار رو کنار گذاشتم و فقط درس خواندم ، در این مدت هم به مطالعه تکنولوژی دات نت پرداختم و کتابهای 2010 C# و 2008 SQL Server و ADO.NET رو به صورت زبان اصلی خوندم و تمرین کردم، حالا سوال من از شما اینه که برای کسی که تا به حال تجربه کار حرفه ای در یک گروه توسعه نرم افزار حرفه ای رو نداشته چطور باید شروع کنم و این تجربه کسب کنم؟ شرکت ها که کسی را که سابقه کار نداشته باشه استخدام نمی کنن، کارآموز هم که قبول نمی کنن پس از کجا باید شروع کرد؟ آیا سایتهای خارجی یا جایی هست که بشه مثلا شبیه سازی شده یا حتی واقعی کارآموزی کرد و تجربه کسب کرد؟
یا سایتهایی که به صورت گروهی روی پروژه ها کار می کنند و جایی هم برای ما داشته باشن؟ یا حتی شرکت های ایرانی معتبر برای کارآموزی؟

iman_pc_love
جمعه 12 اسفند 1390, 16:13 عصر
اصلاً برای یه تازه وارد به یک گروه چه کارهایی هست؟ UI Designer?
باید از کجا شروع کنه؟ چه مراحلی رو طی کنه؟ آخرش به کجا میرسه و ...

barnamenevisforme
جمعه 12 اسفند 1390, 16:52 عصر
سلام
موضوعی که شما در مورد اون سوال دارید کم و بیش موضوعیه که پیش روی خیلی از برنامه نویسها بوده و یا هست.
به نظر من اگه یه برنامه نویس به استخدام جایی در بیاد اگر چه ممکنه از نظر مالی تامین بشه ولی از نظر کاری و افکاری که ایشون داره ممکنه دچار یک سری محدودیت هایی از طرف کارفرما بشه اونوقته که شما فقط باید رویاهای دیگران رو توی این دنیای مجازی به وا قعیت پیوند بدی.
یه راه حل اینه که تا قبل از استخدام در جایی و یا ... به هر جا که میری دنبال نواقص بگردی،ببینی کهع ایا میشه از طریق برنامه نوشتن و کارایی از این قبیل مجموعه ای رو از کارهای تکراری و خسته کننده نجات بدی ؟
به نظر من توی خیلی از موارد کارفرما قادر به تشخیص نیاز خود نیست و این شمایی که با پیشنهادتون میتونیدجرقه رو در ذهن ایشون ایجاد کنید.
موفق باشید.

mahan.2002
جمعه 12 اسفند 1390, 17:14 عصر
با سلام خدمت دوستان
من یه سوال در همین رابطه داشتم که اینکه یک کار تیمی برای انجام پروژه های نرم افزاری چگونه باید باشد؟
مثلا چطور باید کار و تقسیم کرد . مثلا چطور یک قسمت از برنامه را باید کسی انجام بدهد و قسمت دیگری را افراد دیگه .
و چطور باید این پروژه رو تجمع کرد؟

iman_pc_love
جمعه 12 اسفند 1390, 21:49 عصر
یه راه حل اینه که تا قبل از استخدام در جایی و یا ... به هر جا که میری دنبال نواقص بگردی،ببینی کهع ایا میشه از طریق برنامه نوشتن و کارایی از این قبیل مجموعه ای رو از کارهای تکراری و خسته کننده نجات بدی ؟
مثلاً کجا؟

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

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

در واقع اول باید خودتو قبول داشته باشی که میتونی کاری بکنی و بعد چند تا نمونه برنامه خوب هم بسازی تا با اشکالات و راه کارهای مختلف آشنا بشی (چون اون برنامه ممکنه عملا بدرد کسی نخوره ولی تجربیاتش بدرد برنامه نویسی میخوره) بعد اگر بتونی چند لایه برنامه نویسی کنی اون وقت میتونی توی هر تیمی که بخوای وارد بشی و یا اصلا خودت تیم درست کنی.

وضعیت برنامه نویسی توی این مملکت 3 جوره
1 - برنامه نویسی که تجربه نداره و هی کد میزنه و ناراضی از اینه که کار نمیتونه پیدا کنه اگر هم پیدا کنه برای دانشجوها کد میزنه
2 - برنامه نویسی که تجربه کسب کرده و خوب کد میزنه و فکر های مختلف هم اگر داشته باشه در راستای همون برنامه است و کاری نداره که اصول این کار درسته یا نه و هر چی بخوان انجام میده و بقول معروف اهل باده ( هر طرفی باد بوزه اون طرفیه ) یا میگه من مرده شورم هر چی بدن میشورم . اینها کارشون بد نیست ( مناسب باهوش ها نیست )
3 - برنامه نویسی که خیلی تجربه داره و از کد نویسی فاصله گرفته ( چون شده مغز و داره هی تحلیل میکنه ) و افراد مختلف رو میتونه مدیریت کنه راه کار ارائه میده مشکلات جاری رو مطرح میکنه ولی چون فکرهاش و تحول هاش با برنامه جاری بعضی از مدیران نمیخونه یا با تیم نرم افزاری اون مجموعه نمیخونه ، مجبوره که بشه همون شماره 2 و میگه ولش کن بابا اینها که نمیفهمن من چی میگم بزار هر چی میخان همونو بسازم ، چون نمیزارن فکرش رو پیاده کنه و در نهایت اگر هم شماره 2 نشه ، خودش رو از دور خارج میکنه و میشینه کنار چون نمیتونه تحمل کنه که یه خشتی رو دارن کج میزارن

شما اگه وضعیت دیگه ای سراغ دارید بگید

در نهایت میخوام بگم که زیاد فکرت رو مشغول نکن و یکمی اطلاعات عمومی تو ببر بالا توی تجزیه و تحلیل و بعد برنامه نویسی چند لایه تجربه پیدا کن ( تا اونجایی که میتونی ) و بعد توی یکی 2 تا پروژه رایگان کار کن ( البته اگر کار ها امنیتی و محرمانه و اینها نباشن و بزارن که وارد تیم بشی ) جای دوری نمیره

این چند تا مطلب رو یاد بگیری میتونی هر جا خواستی کار کنی
وارد شدن به شرکت هایی مثل همکاران سیستم و ... حالا حالا ها نمیتونه کسی رو حرفه ای کنه . چون که اولا اونها یک برنامه رو چند تکه میکنن و به افراد میدن و فرد فقط توی اون زمینه کار میکنه اون هم بعد از 1 الی 3 ماه آموزش دادن و آشنا کردن با بعضی ابزار ها که خودشون Develop کردن .
و بعد شما سر در نمیاری که ساختار اون برنامه اصلی چی بوده ( سیاستشون همینه که برنامه لو نره ) و از شما فقط توی یک قسمت دست و پای خوبی میسازن و بعدش شما فکر میکنید که چون همه چی رو بهتون یاد دادن دیگه موندنی هستید . بعدش میبینید که به راحتی با یکی دیگه عوض میشید و شما رو میبرن یه قسمت دیگه بعد از چند بار جابجایی اگر بیایید بیرون میبینید با الانتون فرقی ندارید چرا که وابسته به ابزار اونهایید و اونها هم که ابزارشونو بیرون نمیدن

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

موفق باشید

Leon_SFS
جمعه 12 اسفند 1390, 23:04 عصر
آقا شما همون کارهایی که کردی رو داشته باشه،برای شرکت های مختلف رزومه بفرست
قبول میشی اگه واقعا اینجور که میگی مطالعه کرده باشی و بلد باشی

iman_pc_love
جمعه 12 اسفند 1390, 23:52 عصر
در نهایت میخوام بگم که زیاد فکرت رو مشغول نکن و یکمی اطلاعات عمومی تو ببر بالا توی تجزیه و تحلیل و بعد برنامه نویسی چند لایه تجربه پیدا کن ( تا اونجایی که میتونی ) و بعد توی یکی 2 تا پروژه رایگان کار کن ( البته اگر کار ها امنیتی و محرمانه و اینها نباشن و بزارن که وارد تیم بشی ) جای دوری نمیره
برنامه نویسی چند لایه رو چطور میشه یاد گرفت؟ مگه غیر از این نیست که تو یه تیم تجربه کار پیدا کنی؟ کتابی هست که این روش رو مثلاً توضیح داده باشه یا یه پروژه فرضی رو با این روش توسعه داده باشه؟ آیا شما پروژه یا شرکتی را سراغ دارید که درست و حسابی باشه، من حاضرم رایگان کار کنم.

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

iman_pc_love
شنبه 13 اسفند 1390, 19:59 عصر
سایتی سراغ دارید که مثلاً افراد از سراسر دنیا بیان روی یک پروژه کار کنن؟ و جایی برای کار آموزان باشه؟

zarrinnegar
شنبه 13 اسفند 1390, 20:39 عصر
برنامه نویسی چند لایه رو چطور میشه یاد گرفت؟ مگه غیر از این نیست که تو یه تیم تجربه کار پیدا کنی؟ کتابی هست که این روش رو مثلاً توضیح داده باشه یا یه پروژه فرضی رو با این روش توسعه داده باشه؟ آیا شما پروژه یا شرکتی را سراغ دارید که درست و حسابی باشه، من حاضرم رایگان کار کنم.

برنامه نویسی چند لایه رو همیشه نمیشه از تیم یاد گرفت ، تنها با مطالعه هم نمیشه یاد گرفت ، باید عملا یاد گرفت
کتاب و نمونه برنامه توی اینترنت هم زیاده ولی شما باید یک پروژه رو شروع کنی بعد هر جا گیر کردی میتونی از همین بچه های سایت بپرسی تا کمکت کنن

توی تیم بودن بهترین حالته یاد گیریه ولی تنها راه یادگیری نیست . شما وارد هر تیمی که بشید تا با اونها آشنا بشید و کار رو تجزیه و تحلیل کنید مدتی طول میکشه و معمولا پروژه هایی که بصورت تیمی کار انجام میدن وقت برای این کار نمیزارن ، مگر اینکه تیم رو شما با چند نفر درست کنید و بعد کار رو تعریف کنید و بعد شروع به کار کنید ، وقتی به این مرحله میرسید و کار رو عملا شروع میکنید و اگر کار برای جایی باشه یعنی قرارداد کاری هم ببندید عملا خواهید دید که اگر کسی بخواد وارد تیم شما بشه شما به راحتی نمیتونید وارد تیم خودتون کنید به چند دلیل 1 - نمیدونید چقدر میدونه و چقدر تجربه داره و آوردن اون شخص یک ریسکه برای زمان تحویل پروژه ، چون باید از همه چی سر در بیاره و بعد تازه شروع به کار کنه و بعد گیر هاش مشخص بشه و خلاصه یه بخشی از زمان به آموزش طرف اختصاص پیدا میکنه 2 - نمیدونید با شما سازگار هست ( این مطلب در باره وضعیت مالی و اعتماد و ظرفیت شخص و رفت و آمد و ... مربوط میشه که تاثیر مستقیم توی روند کار تیمی داره ) یا نه که این مطلب زمان میخواد 3 - ممکنه کار و افکار کار خاص باشه (مثلا برای سازمان و یا ارگان خاص باشه و افراد خارج از از تیم شناخته شده رو قبول نکنن و یا اطلاعات رو نتونن به افراد جدید بدن )و تیم نخواد که به بیرون درز پیدا کنه بنابراین درباره ساختار اصلی برنامه به کسی توضیح نمیدن و ...

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

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

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

یک لینک آموزش برنامه نویسی 3 لایه (http://how2learnasp.net/article.aspx?code=88407883-053c-4035-88c8-b75d804d6e2c)
این هم یک نمونه خوب از کد 3 لایه (http://www.codeproject.com/Articles/36847/Three-Layer-Architecture-in-C-NET)
این هم یک نمونه دیگه دفترچه تلفن با سورس (http://csharpcorner.ir/category/-d9bed8b1d988da98d987-d8afd981d8aad8b1da86d987-d8aad984d981d986-d8a8d8b1d986d8a7d985d987-d986d988db8cd8b3db8c-d8a8d8a7-d985d8b9d985d8a7d8b1db8c-da86d986d8af-d984d8a7db8cd987-%283-d984d8a7db8cd987-d8a7db8c%29.aspx)

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

iman_pc_love
یک شنبه 14 اسفند 1390, 12:27 عصر
ببینید هدف از در یک گروه کار کردن این نیست که شما بتونید سوالاتتون رو از اعضای گروه بپرسید، شما اگه یه کم دست و پا شکسته انگلیسی بلد باشید، تخصصی ترین سوالاتتون رو میتونید در هر زمینه ای تو سایتهای خارجی، و حتی فروم سایت خود ماکروسافت هم بپرسید در عرض 1 ساعت (بستگی داره) به جوابتون برسید، هدف از در یک گروه کار کردن اینکه که شما با فراید تولید نرم افزار آشنا بشید، بتونید role های مختلف رو بگیرید و انجام بدید تا به role های سطح بالا تر برسید، به عنوان مثال تو همین برنامه نویسی سه لایه فرض کنید یه گروه 4 نفره می خان یه پروژه رو پیش ببرن، هر نفر مسئول یک لایه است. شما به عنوان یک عضو تازه وارد میتونید تو لایه UI کار کنید، و از توابع و کلاسهایی که دیگر افراد گروه در لایه BLL ایجاد کردن استفاده کنید، و ظاهر برنامه رو بسازید همین که یه مدتی از این کلاسا استفاده کردید، بعد خودتون می تونید وارد لایه BLL بشید و اونجا کارکنید، در واقع از کلاسهای لایه DAL که افراد دیگر گروه ایجاد کردن استفاده کنید، و بعد از یک مدت استفاده می تونید خودتون تو لایه DAL کار کنید و بعد از اینکه تو این سه مورد تجربه پیدا کردید دیگه یه سطح بالا تر برید و به عنوان یه object oriented designer فقط با استفاده از نمودار ها و ابزار های مدل سازی نرم افزار کلاسهای برنامه رو طراحی کنید خوب شما به عنوان یه طراح باید نیازهای نرم افزار رو بدونید که بتونید برای حلش طرح بدید، پس نیاز به یه تحلیل گر هست که بره دنبال تهیه و تدارک نیازمندهی های نرم افزار و اونو مستند کنه و به شما بده و شما هم براش طرحی ارائه بدید و طرح رو بدید دست برنامه نویسان تا اونو پیاده سازی کنن، خوب بده بستونا بین اعضای گروه، هماهنگی بینشون، نمودارها، مستندات و طرحها و نهایتاً کدهای ایجاد شده توسط برنامه نویسان یه جوری باید با هم هماهنگ باشن که وظیفه هماهنگیشون با مدیره پروژه است، یه سری اعضای گروه هم هستن که وظیفشون تست برنامه است و شما تا وقتی تو یه گروه بزرگ کار نکنید با این مهارتها و وظایف آشنایی پیدا نمی کنید و همیشه به عنوان یه برنامه نویس دست پایین که نهایتاً میتونه یه برنامه برای فروشگاهی با تعداد کاربران انگشت شمار و در اسکیل پایین، بسازه اونم نه معلومه نیازسنجی برنامه درست انجام شده یا نه، نه معلومه برنامه درست کار می کنه یا نه و نه تست درست حسابی رو برنامه انجام شده و هزار تا چیز دیگه. متاسفانه تو رشته نرم افزار دانشجوها در طول تحصیل باید در این موارد آموزش ببین و روش کار کنن و تجربه کسب کنن که نه دانشگاه های ما استاد درست حسابی دارن و نه امکاناتش هست، من با چند تا از برنامه نویسهای آمریکایی که تو یه تیم کار میکردن صحبت می کردم می گفتن که شما برای کسب این مهارتها باید دانشگاه برید! حالا معلوم میشه اونا تو دانشگاه هاشون چکار می کنن و دانشجوهای ما تو دانشگاه هامون چیکار می کنن، به خاطر همینه که تو ایران حتی خود برنامه نویسان هم فکر می کنن برای برنامه نویس شدن و توسعه نرم افزار نیاز به دانشگاه رفتن نبود و خودشون از روی کتابهای و مراجع مختلف می تونستن این کار رو انجام بدن، البته درست هم فکر می کنن، چون فعلاً وضعیت دانشگاه های ما اینه دیگه. وقتی استادهای نرم افزار 99% دانشگاه های ما با خ.ر خونی کتابهای درسی مجبور بودن کنکور ارشد، یا دکتری قبول بشن و بیان استاد بشن و تجربه علمی و عملی واقعی نداشته باشن، خوب همین میشه دیگه

iman_pc_love
دوشنبه 15 اسفند 1390, 15:07 عصر
کسی برای بهبود این وضع پیشنهادی عملی نداره؟ دقت کنید گفتم عملی :لبخند:

mahan.2002
دوشنبه 15 اسفند 1390, 19:42 عصر
با سلام
میشه خیلی ساده و بدونه حاشیه های اضافی بفرمایید .
یک برنامه نویسی به صورت سه لایه بر چه اساسی تقسیم بندی میشه؟
و لایه های مختلف مختص به چه وظایفی هست؟ تا حدد امکان خلاصه و با یک مثال.

iman_pc_love
دوشنبه 15 اسفند 1390, 20:23 عصر
والا من خودم تازه این روش رو یاد گرفتم ولی این موارد رو در نظر بگیرید
1- باید یه سلوشن بسازید و داخلش 3 تا پروژه ایجاد کنید ، 2 تا پروژه از نوع کلاس و یک پروژه از نوع مثلاً ویندوز فرم. به ترتیب با نامهای UI-BLL-DAL و طرحتون رو طوری در نظر بگیرید که هر لایه فقط از امکانات لایه بالاتر خود استفاده کنه. این جمله قبلی رو به عنوان جمله طلایی در نظر بگیرید دیگه طراحی آسون میشه.
تو کلاس DAL باید توابعی رو ایجاد کنید که انواع کوئری ها رو روی دیتابیس انجام بدن مثلاً executescalar , executereader و توابع دیگه. هدف اینه که کلاس BLL از این توابع استفاده کنه و دیگه نگران مسائلی مثل connection string و ارتباط با دیتابیس نباشه به عبارت دیگه : تو کلاس BLL شما هر وقت نیاز داشتید که از تابع مثلاً executescalar مربوط به ADO.NET استفاده کنید راحت نام این تابع رو صدا می کنید، در واقع این تابع تو کلاس DAL پیاده شده و جزئیات مربوط به کانکشن استرینگ و ارتباط با دیتابیس رو انجام میده و به این ترتیب دیگه لایه BLL از این مسائل خلاص میشه. کار دیگه ای که تو لایه BLL باید انجام بشه اینه که بابت هر جدول تو دیتابیس یه کلاس با همان نام جدول ساخته بشه و توابعی فراهم بشه که انواع اعمال لازم روی اون جدول رو انجام بده، مثلا فرض کنید تو دیتابیس یه جدول با نام Users داریم که اطلاعات کاربران رو ذخیره میکنه، خوب باید توابعی تو لایه BLL ایجاد کنیم که مثلاً اعمال اضافه کردن کاربر جدید، حذف کاربر، جستجو و ... رو انجام بده، هدف از این کارم اینه که تو لایه UI که آخرین لایه است دیگه با مسائل مربوط به دستورات sql و کوئری و مسائل دیگر دیتابیس نباشیم، به عبارت دیگر تو لایه UI که پروژه اصلی است راحت بگیم مثلاً AddUser ALI و یه کاربر با این نام تو جدول دیتابیس ذخیره بشه. دیدید که خیلی جالبه، دقیقاً مثل لایه های شبکه می مونه، تو هر لایه فقط از امکانات لایه زیرین استفاده میشه و با جزئیات درگیر نمی شیم اینجوری هم پروژه به 3 قسمت تقسیم میشه و ساده میشه و هم این 3 لایه میتونه همزمان توسط افراد مختلف توسعه داده بشه و هم اقسام مختلف پروژه به صورت مستقل میتونه به روز رسانی بشه . البته مسائل ریز دیگه ای هم هست که از بیان اونا صرف نظر میکنم ولی منطق کلی تا اونجا که من می دونم اینه و برای یادگیری جزئیات خودتون باید برید دنبالش

Sirwan Afifi
دوشنبه 15 اسفند 1390, 20:47 عصر
در لایه DAL ما باید عملیات و کار با دیتابیس رو پیاده سازی کنیم مثلا اعمال Insert,Delete,Update,...
در لایه BLL نیز Entity ها را مشخص میکنیم که کلا شامل prop میباشد.
در لایه UI نیز اینترفیس برنامه را طراحی می کنیم.

به عنوان مثال لایه BLL :
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public int Age { get; set; }
}

و در لایه DAL :

public class DAL
{
public void Add(User u)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=University;Integrated Security=True");
SqlCommand cmd = new SqlCommand("insert into [User] values(@Name,@Family,@Age)",con);
cmd.Parameters.Add("@Name", u.Name);
cmd.Parameters.Add("@Family",u.Family);
cmd.Parameters.Add("@Age",u.Age);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}

در لایه UI نیز به این صورت می باشد :

private void btn_Save_Click(object sender, EventArgs e)
{
User u = new User();
DAL d = new DAL();
u.Name = txt_Name.Text;
u.Family = txt_Family.Text;
u.Age = Int32.Parse(txt_Age.Text);
d.Add(u);
MessageBox.Show("اطلاعات شما با موفقیت ثبت گردید");
}

iman_pc_love
دوشنبه 15 اسفند 1390, 21:17 عصر
دیگه داریم از بحث اصلی خارج میشیم
برگردیم به بحثمون

ببینید هدف از در یک گروه کار کردن این نیست که شما بتونید سوالاتتون رو از اعضای گروه بپرسید، شما اگه یه کم دست و پا شکسته انگلیسی بلد باشید، تخصصی ترین سوالاتتون رو میتونید در هر زمینه ای تو سایتهای خارجی، و حتی فروم سایت خود ماکروسافت هم بپرسید در عرض 1 ساعت (بستگی داره) به جوابتون برسید، هدف از در یک گروه کار کردن اینکه که شما با فراید تولید نرم افزار آشنا بشید، بتونید role های مختلف رو بگیرید و انجام بدید تا به role های سطح بالا تر برسید، به عنوان مثال تو همین برنامه نویسی سه لایه فرض کنید یه گروه 4 نفره می خان یه پروژه رو پیش ببرن، هر نفر مسئول یک لایه است. شما به عنوان یک عضو تازه وارد میتونید تو لایه UI کار کنید، و از توابع و کلاسهایی که دیگر افراد گروه در لایه BLL ایجاد کردن استفاده کنید، و ظاهر برنامه رو بسازید همین که یه مدتی از این کلاسا استفاده کردید، بعد خودتون می تونید وارد لایه BLL بشید و اونجا کارکنید، در واقع از کلاسهای لایه DAL که افراد دیگر گروه ایجاد کردن استفاده کنید، و بعد از یک مدت استفاده می تونید خودتون تو لایه DAL کار کنید و بعد از اینکه تو این سه مورد تجربه پیدا کردید دیگه یه سطح بالا تر برید و به عنوان یه object oriented designer فقط با استفاده از نمودار ها و ابزار های مدل سازی نرم افزار کلاسهای برنامه رو طراحی کنید خوب شما به عنوان یه طراح باید نیازهای نرم افزار رو بدونید که بتونید برای حلش طرح بدید، پس نیاز به یه تحلیل گر هست که بره دنبال تهیه و تدارک نیازمندهی های نرم افزار و اونو مستند کنه و به شما بده و شما هم براش طرحی ارائه بدید و طرح رو بدید دست برنامه نویسان تا اونو پیاده سازی کنن، خوب بده بستونا بین اعضای گروه، هماهنگی بینشون، نمودارها، مستندات و طرحها و نهایتاً کدهای ایجاد شده توسط برنامه نویسان یه جوری باید با هم هماهنگ باشن که وظیفه هماهنگیشون با مدیره پروژه است، یه سری اعضای گروه هم هستن که وظیفشون تست برنامه است و شما تا وقتی تو یه گروه بزرگ کار نکنید با این مهارتها و وظایف آشنایی پیدا نمی کنید و همیشه به عنوان یه برنامه نویس دست پایین که نهایتاً میتونه یه برنامه برای فروشگاهی با تعداد کاربران انگشت شمار و در اسکیل پایین، بسازه اونم نه معلومه نیازسنجی برنامه درست انجام شده یا نه، نه معلومه برنامه درست کار می کنه یا نه و نه تست درست حسابی رو برنامه انجام شده و هزار تا چیز دیگه. متاسفانه تو رشته نرم افزار دانشجوها در طول تحصیل باید در این موارد آموزش ببین و روش کار کنن و تجربه کسب کنن که نه دانشگاه های ما استاد درست حسابی دارن و نه امکاناتش هست، من با چند تا از برنامه نویسهای آمریکایی که تو یه تیم کار میکردن صحبت می کردم می گفتن که شما برای کسب این مهارتها باید دانشگاه برید! حالا معلوم میشه اونا تو دانشگاه هاشون چکار می کنن و دانشجوهای ما تو دانشگاه هامون چیکار می کنن، به خاطر همینه که تو ایران حتی خود برنامه نویسان هم فکر می کنن برای برنامه نویس شدن و توسعه نرم افزار نیاز به دانشگاه رفتن نبود و خودشون از روی کتابهای و مراجع مختلف می تونستن این کار رو انجام بدن، البته درست هم فکر می کنن، چون فعلاً وضعیت دانشگاه های ما اینه دیگه. وقتی استادهای نرم افزار 99% دانشگاه های ما با خ.ر خونی کتابهای درسی مجبور بودن کنکور ارشد، یا دکتری قبول بشن و بیان استاد بشن و تجربه علمی و عملی واقعی نداشته باشن، خوب همین میشه دیگه
کسی راه حلی عملی برای این مشکلات نداره؟

mahan.2002
دوشنبه 15 اسفند 1390, 21:57 عصر
در لایه DAL ما باید عملیات و کار با دیتابیس رو پیاده سازی کنیم مثلا اعمال Insert,Delete,Update,...
در لایه BLL نیز Entity ها را مشخص میکنیم که کلا شامل prop میباشد.
در لایه UI نیز اینترفیس برنامه را طراحی می کنیم.
مرسی از شما
یه سوال داشتم در لایه BLL اولا در کجا تعریف میشه . یعنی در خود Dll که لایه DAL هست؟
بعد چه لازومی داره ما این لایه رو داشته باشیم منظورمو دقیق تر بگم یعنی چه مزیتیداره . و ما پارامترها و متغییر هارو مستقیم به لایه DAL بفرستم.
و سول دیگه که داشتم در تقسیم بندی پروژه که بصورت گروهی انجام میشه چطور برنامه رو تقسیم کنم بهتر یعنی بر چه اساسی ( موضوعی و یا لایه ای ... )

Sirwan Afifi
دوشنبه 15 اسفند 1390, 22:08 عصر
یه سوال داشتم در لایه BLL اولا در کجا تعریف میشه . یعنی در خود Dll که لایه DAL هست؟

خوب همون طور که دوستان فرمودن می تونید 3 پروژه مجزا تعریف کنید BLL در یک پروژه و DAL در پروژه دیگر


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

Sirwan Afifi
دوشنبه 15 اسفند 1390, 22:09 عصر
موضوعی و یا لایه ای ...
منظورتون دقیقا چیه؟

mahan.2002
دوشنبه 15 اسفند 1390, 22:18 عصر
خوب مزایای زیادی داره توی سایت قبلا بحث شده به پست های آقای مداح در مورد برنامه نویسی چند لایه مراجعه کنید.
ممنون من پست آقای مداح رو نمیدونم کجاست . ضمنا می خواستم گزینه ای و خلاصه اگر مزیتی داره بفرماید. اگر چندان لازومی نداره .. دونبالش نرم . و استفاده نکنم.

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

Sirwan Afifi
دوشنبه 15 اسفند 1390, 22:33 عصر
مزایا :

1-Performance
2-Scalability
3-Re-usability
4-و...

در ضمن اینم پست آقای مداح (http://barnamenevis.org/showthread.php?151744-%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88-4-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87(N-Tier-N-Layer-Architecture)&highlight=%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C+%DA %86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87)

Sirwan Afifi
دوشنبه 15 اسفند 1390, 22:35 عصر
در ضمن برای درک بیشتر مفاهیم فصل 4 کتاب ASP.NET 3.5, Application Architecture and Design (http://www.amazon.com/ASP-NET-3-5-Application-Architecture-Design/dp/1847195504) بخون

موفق باشی/

iman_pc_love
دوشنبه 15 اسفند 1390, 22:43 عصر
بابا چرا بحث رو منحرف کردید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟!!!!!!!!!!!!!!!!!!:عصبانی:

mahan.2002
دوشنبه 15 اسفند 1390, 23:09 عصر
مزایا :

1-Performance
2-Scalability
3-Re-usability
4-و...

در ضمن اینم پست آقای مداح (http://barnamenevis.org/showthread.php?151744-%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88-4-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87(N-Tier-N-Layer-Architecture)&highlight=%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C+%DA %86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87)
فکر میکنم از بخش دوم سوالم گزشتید... نمیدونم دوستان دیگه که تجربه کار گروهی دارن و به صورت عملی دارن کار میکنن شاید بخش دوم سوالم رو بتونا جواب بدن.
بر چه اساسی بهتره این تقسیم بندی انجام بشه؟
در ضمن ممنونم که اطلاعات مفیدتون رو در اختیار گذاشتید. در مورد مقاله دوم من زبانم خیلی خوب نیست. بازم مرسی
واقعا مفید مختصر بود.:لبخندساده:

iman_pc_love
سه شنبه 16 اسفند 1390, 11:11 صبح
کم کم دارم شک می کنم که پست های من برای شماها قابل مشاهده هست یا نه؟ :ناراحت:
بابا این تاپیک چه ربطی به آموزش 3 لایه داره؟