PDA

View Full Version : راهکارهای آنالیز یک پروژه



jaykob
یک شنبه 18 اسفند 1392, 16:29 عصر
سلام دوستان

یک سوال داشتم اینه که می خواستم یک راهکار خوب بدونم برای آنالیز پروژه ای تقریبا بزرگ اینه که چه مراحلی رو طی می کنه ؟ اگر ما چند نفر باشیم در mvc تقسیم کار به چه شکل است ؟ اول باید دیتابیس رو طراحی کرد ؟ مستند سازی آیا قوانینی دارد ؟ منبعی برای یاد گرفتن تو این زمینه هست ؟


ممنون

hakim22
یک شنبه 18 اسفند 1392, 23:00 عصر
منبع خاصی سراغ ندارم که مشکل شما رو توضیح بده . اصولا شما باید چند پروژه انجام بدید و با مشکلات روبرو شوید و بعد برای آنها راه حل پیدا کنید. حتی اگر منبعی هم بیابید که به شما آموزش بدهد چون عملا مشکل را تجربه نکرده اید درک درستی از مطالب توضیح داده شده نخواهید داشت.

با توجه به تجربه ی من که روی پروژه های بزرگ اتوماسیون تحت وب کار کرده ام باید بگویم مهمترین مسئله این است که برنامه ی شما باید همیشه آمادگی تغییرات را داشته باشد و منظم و دقیق باشد. این قانون شماره ی یک است.

شما باید پروژه را به چند فاز تقسیم کنید و بخشهای آن را اولیت بندی کنید. و پیش بینی کنید در پایان هر فاز باید به اهدافی برسید. پایان هر فاز پایان هر نسخه از نرم افزار شماست. شما هیچ چیز را یکبار و برای همیشه نمینویسید. همیشه میدانید که کدهایی که الان در پروژه می نویسید در فازهای بعدی و در آینده نیاز به تغییر خواهند داشت.

در ادامه چند اولویت باید داشته باشید :
1- برنامه کار کند
2-کارها را آن که باید انجام دهد نه آنطور که ما توانسته ایم بار اول پیاده کنیم
3-کارها را با سرعت بهتر و بهینه تر انجام دهد.
4-امنیت بالا داشته باشد
5-ظاهر مناسب داشته باشد.

در پروژه های بزرگ حتما باید از روشهای جدا سازی وابستگی ها استفاده کنید. در مورد Inversion Of Control تحقیق کنید و ابزار Ninject را خوب بشناسید. الگوی Repository /Services و Unit Of Work را مطالعه کنید. همچنین ابزاری مثل AutoMapper بسیار در کاهش حجم کار به شما کمک خواهند کرد. ابزار MEF هم برای پروژه های بزرگ عالی است و میتواند بسیار مفید باشد.

در پروژه های بزرگ بهتر است بانک اطلاعاتی را با استفاده از SQL بنویسید و با محیط برنامه نویسی آن آشنا باشید. پشتیبانی و مدیریت اینگونه سیستم ها امروز و در آینده به خود SQL احتیاج و بحث Code first چندان نمیتواند راه گشای شما باشد. مگر در شروع کار.

در نهایت بهتریم روش استفاده از Repository و Services و Controller و Model و View در کنار هم است. برای View نیاز به برنامه نویس UI و طراح دارید. برای Model و Repository برنامه نویس بانک اطلاعاتی و برای Services هم یک نفر آشنا به برنامه نویسی #C کارتان را راه می اندازد و برای بخش Controller و Web هم یک برنامه نویس سمت سرور با ASP نیاز دارید.
اگر برنامه را طبق الگو بنویسید همه ی این افراد یا واحدهای کاری میتوانند در کنار هم ولی جدا از هم کار کنند.

jaykob
دوشنبه 19 اسفند 1392, 11:21 صبح
منبع خاصی سراغ ندارم که مشکل شما رو توضیح بده . اصولا شما باید چند پروژه انجام بدید و با مشکلات روبرو شوید و بعد برای آنها راه حل پیدا کنید. حتی اگر منبعی هم بیابید که به شما آموزش بدهد چون عملا مشکل را تجربه نکرده اید درک درستی از مطالب توضیح داده شده نخواهید داشت.

با توجه به تجربه ی من که روی پروژه های بزرگ اتوماسیون تحت وب کار کرده ام باید بگویم مهمترین مسئله این است که برنامه ی شما باید همیشه آمادگی تغییرات را داشته باشد و منظم و دقیق باشد. این قانون شماره ی یک است.

شما باید پروژه را به چند فاز تقسیم کنید و بخشهای آن را اولیت بندی کنید. و پیش بینی کنید در پایان هر فاز باید به اهدافی برسید. پایان هر فاز پایان هر نسخه از نرم افزار شماست. شما هیچ چیز را یکبار و برای همیشه نمینویسید. همیشه میدانید که کدهایی که الان در پروژه می نویسید در فازهای بعدی و در آینده نیاز به تغییر خواهند داشت.

در ادامه چند اولویت باید داشته باشید :
1- برنامه کار کند
2-کارها را آن که باید انجام دهد نه آنطور که ما توانسته ایم بار اول پیاده کنیم
3-کارها را با سرعت بهتر و بهینه تر انجام دهد.
4-امنیت بالا داشته باشد
5-ظاهر مناسب داشته باشد.

در پروژه های بزرگ حتما باید از روشهای جدا سازی وابستگی ها استفاده کنید. در مورد Inversion Of Control تحقیق کنید و ابزار Ninject را خوب بشناسید. الگوی Repository /Services و Unit Of Work را مطالعه کنید. همچنین ابزاری مثل AutoMapper بسیار در کاهش حجم کار به شما کمک خواهند کرد. ابزار MEF هم برای پروژه های بزرگ عالی است و میتواند بسیار مفید باشد.

در پروژه های بزرگ بهتر است بانک اطلاعاتی را با استفاده از SQL بنویسید و با محیط برنامه نویسی آن آشنا باشید. پشتیبانی و مدیریت اینگونه سیستم ها امروز و در آینده به خود SQL احتیاج و بحث Code first چندان نمیتواند راه گشای شما باشد. مگر در شروع کار.

در نهایت بهتریم روش استفاده از Repository و Services و Controller و Model و View در کنار هم است. برای View نیاز به برنامه نویس UI و طراح دارید. برای Model و Repository برنامه نویس بانک اطلاعاتی و برای Services هم یک نفر آشنا به برنامه نویسی #C کارتان را راه می اندازد و برای بخش Controller و Web هم یک برنامه نویس سمت سرور با ASP نیاز دارید.
اگر برنامه را طبق الگو بنویسید همه ی این افراد یا واحدهای کاری میتوانند در کنار هم ولی جدا از هم کار کنند.

سلام

خیلی خیلی از توضیحاتتون ممنون هستم

من تا به حال چند پروژه نه خیلی بزرگ ولی خوب با تقریبا 70 ماژول نوشتم البته تحت asp.net web forms و اینکه بزرگترین مشکلم هم همین نکته ای بود که شما گفتید تغییراتی که بعد می خواستند و به مشکلات بزرگی می خوردیم با توجه به اینکه به تازگی mvc رو کار می کنم خیلی از مشکلات داخل ساختار mvc حل شده ولی همچنان خوب اصولی نوشتن خیلی برام مهم است .

اگه وقت دارید امکان داره توضیحاتی در رابطه با Repository و Services بدید .

و اینکه بهتر است ما تمامی کارهای بانک اطلاعاتیمون رو تحت پروسیجر و خود sql انجام بدیم ؟

آیا به نظر شما این روند درست است ؟

1 - آنالیز اولیه و شناخت پروژه
2 - لیست موجودیت ها و خصوصیت ها
3 - لیست عملکرد ها و قوانین و قائده های پروژه
4 - مستند سازی بخش ها به صورت جدا { model ها و view ها و controller ها }
5 - فاز بندی پروژه برای جلو رفتن کار
6 - تست اولیه و خطایابی
7 - تست نهایی و ارائه


فقط یک سوال برام پیش اومد ما به طور مثال همزمان model هارو بدیم کسی بنویسه و موازی کسی در حال طراحی کنترلر و view ها باشند . برای طراحی view ها یا کنترلر مدل ها هنوز نوشته نشده باشند آیا باید از روی سند پروپرتی ها را داشته باشد و کار کند ؟ یا راهکار دیگری هم هست ؟ یا در هر صورت باید مدل ها اول طراحی شوند ؟


با تشکر

مهدی هادیان2
دوشنبه 19 اسفند 1392, 11:48 صبح
بسم الله الرحمن الرحیم
با سلام

در پروژه های بزرگ بهتر است بانک اطلاعاتی را با استفاده از SQL بنویسید و با محیط برنامه نویسی آن آشنا باشید. پشتیبانی و مدیریت اینگونه سیستم ها امروز و در آینده به خود SQL احتیاج و بحث Code first چندان نمیتواند راه گشای شما باشد. مگر در شروع کار.
منظورتون استفاده از امکانات فانکشن و پروسیجر sql است به جای اینکه کوئری ها رو در linq , ... بنویسیم؟
با سپاس

hakim22
دوشنبه 19 اسفند 1392, 14:11 عصر
بسم الله الرحمن الرحیم
با سلام

منظورتون استفاده از امکانات فانکشن و پروسیجر sql است به جای اینکه کوئری ها رو در linq , ... بنویسیم؟
با سپاس

بله در بانکهای یک سیستم اتوماسیون اداری که من درگیر بود چیزی نزدیک 500 تا 600 جدول اطلاعات وجود داشت و مدیریت چنین حجم گسترده ای از اطلاعات از طریق SQL باید انجام بشه. قابلیت های زبان SQL بسیار وسیع هست و تست و بررسی ، کپی اطلاعات ، رفع عیب و ... صد در صد به SQL احتیاج داره و وقت کمتری میگیره . مثلا ترجیح ما همین بود که View ها در SQL ساخته بشه و پروسه های مربوط به تراکنش در سمت SQL نوشته شوند. کدهای کمتری در #C نوشته شد. و فقط از نتیجه ی View استفاده شد.

jaykob
دوشنبه 19 اسفند 1392, 16:48 عصر
بله در بانکهای یک سیستم اتوماسیون اداری که من درگیر بود چیزی نزدیک 500 تا 600 جدول اطلاعات وجود داشت و مدیریت چنین حجم گسترده ای از اطلاعات از طریق SQL باید انجام بشه. قابلیت های زبان SQL بسیار وسیع هست و تست و بررسی ، کپی اطلاعات ، رفع عیب و ... صد در صد به SQL احتیاج داره و وقت کمتری میگیره . مثلا ترجیح ما همین بود که View ها در SQL ساخته بشه و پروسه های مربوط به تراکنش در سمت SQL نوشته شوند. کدهای کمتری در #C نوشته شد. و فقط از نتیجه ی View استفاده شد.

ممنون ; هر زمان که وقت دارید و به سوال من هم جواب بدید ممنون می شم

تشکر

hakim22
سه شنبه 20 اسفند 1392, 08:43 صبح
توضیحاتی در رابطه با Repository و Services بدید .

این روش پیچیدگی هایی دارد که باید در قالب دیاگرام و توضیحات مفصل به آن پرداخت . فقط اینکه وظایف کار با بانک به Repository و وظایف آماده کردن اطلاعات برای Controller به Services منتقل میشود و در Controller چیزی بیش از یک تابع که از Services فراخوانی میشود و یک دستور که صفحه ی مورد نظر را نمایش میدهد نخواهیم داشت. مگر در مواردی که مثلا اطلاعات Session یا ViewBag نیاز به تغییر یا تنظیم داشته باشند. خود بخش services هیچ ارتباط مستقیمی با بانک اطلاعاتی ندارد و همه کارهای مربوط به CRUD را از طریق بخش Repository انجام میدهد. وظیفه ی سرویس ترکیب اطلاعات چند جدول و ارسال آن به کنترلر یا دریافت اطلاعات از کنترلر و افزودن اطلاعات بیشتر به آن است. مثلا تاریخ و زمان ثبت رکورد در فرمی که کاربر پر میکند پرسیده نمیشود. اینگونه اطلاعات بعدا در لایه ی سرویس به اطلاعات افزوده شده و به رکورد ارسال میشود.

کار کردن با این سیستم باعث میشود مجبور شوید کلاسهای زیادی را نمونه سازی کنید. و این خودش یک مشکل بزرگ است که آن را با استفاده از ابزار IoC مانند Ninject میتوانید برطرف کنید.


و اینکه بهتر است ما تمامی کارهای بانک اطلاعاتیمون رو تحت پروسیجر و خود sql انجام بدیم ؟


توضیح دادم ، مگر اینکه در آغاز راه هستید و هیچ تجربه ای در زمینه ی SQL ندارید.


آیا به نظر شما این روند درست است ؟

1 - آنالیز اولیه و شناخت پروژه
2 - لیست موجودیت ها و خصوصیت ها
3 - لیست عملکرد ها و قوانین و قائده های پروژه
4 - مستند سازی بخش ها به صورت جدا { model ها و view ها و controller ها }
5 - فاز بندی پروژه برای جلو رفتن کار
6 - تست اولیه و خطایابی
7 - تست نهایی و ارائه

میتواند درست باشد. اما همیشه به همین تمیزی اجرا نخواهد شد.


فقط یک سوال برام پیش اومد ما به طور مثال همزمان model هارو بدیم کسی بنویسه و موازی کسی در حال طراحی کنترلر و view ها باشند . برای طراحی view ها یا کنترلر مدل ها هنوز نوشته نشده باشند آیا باید از روی سند پروپرتی ها را داشته باشد و کار کند ؟ یا راهکار دیگری هم هست ؟ یا در هر صورت باید مدل ها اول طراحی شوند ؟


تیم برنامه نویسی بانک همیشه چند قدم جلوتر فعالیت میکند. تیم برنامه نویسی HTML با مدل اصلا کاری ندارد. آنها ViewModel ها را لازم دارند که کلاسهای ساده ای هستند و با کمترین تجربه قابل کد نویسی هستند. بخش مربوط به Validation هم در این محدوده قرار میگیرد.این تیم میتواند از Code First برای کار خودش استفاده کند.

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

HamidNch
پنج شنبه 22 اسفند 1392, 08:25 صبح
جهت ارتباط با بانک اطلاعاتی(Sql، Oracle و ...) لزوما از ORM ها استفاده نمایید.هم سرعت کار بالا میره و هم مدیریت و دقت کار.مثلا او آر ام Entity Framework مایکروسافت که بطور کامل و مفصل می تونین اون رو در سایت استاد وحید نصیری بصورت روان یاد بگیرین.