PDA

View Full Version : سوال: بهترین معماری برای انجام پروژه های بزرگ



haamidd
دوشنبه 25 آبان 1394, 09:03 صبح
با سلام و عرض ادب.

در این تاپیک (http://barnamenevis.org/showthread.php?426899-Repository-In-ASP-NET-MVC) من خوندم که دوستان درمورد معماری مناسب برای انجام پروژه های بزرگ صحبت میکردند و در این لینک (http://barnamenevis.org/showthread.php?426899-Repository-In-ASP-NET-MVC&p=1910506&viewfull=1#post1910506)که آقای
hakim22 (http://barnamenevis.org/member.php?244339-hakim22)
http://barnamenevis.org/images/statusicon/user-offline.png یک نوع معماری ایی رو معرفی کردند.

خواستم از دوستان و خود آقای Hakim22 که یک نمونه پروژه درمورد این نوع معماری ارائه بدن ممنون میشم : )

موفق و سربلند باشید

hakim22
سه شنبه 26 آبان 1394, 19:34 عصر
اول اینکه چیزی به اسم بهترین معماری وجود نداره ، هر پروژه نیازمندی های خودشو داره.

مهمترین اصل در پیاده سازی یک پروژه نظم و دید بلند مدت است. هر پروژه ای هرچند کوچک ممکن است در آینده رشد کند و شما همیشه باید برای تغییر دادن و بروز رسانی پروژه آماده باشید.

در واقع باید برای تغییر کد بنویسید و نه برای تحویل !

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

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

روش های زیادی برای جدا سازی وجود دارد (separation of concerns) که میتوانید آنها را در پیاده سازی بکار گیرید.

haamidd
چهارشنبه 27 آبان 1394, 23:43 عصر
خیلی ممنون : )

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

اما هضم اون آموزش لایه بندی ها و الگوهای طراحی ایی که استفاده کرده بود
برای من سخته و من خیلی متوجه نشدم، یا حداقل اینکه متوجه نشدن اون جداسازی هارو در پروژه تمرینیه خودم پیاده سازی کنم!

ضمنن خلاصه روندی که من الان خودم در پروژه ایجاد کردم اینجوری هست که یک پوشه Repository دارم که کوئری هام از اونجاس و یک پوشه ViewModels که اون صفحاتی که نیاز هست بصورت viewmodel در بیارم رو اینجا ایجاد میکنم. چون تمام جاهای من نیاز به viewmodel ندارن به نظرم.

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


با کمال تشکر

hakim22
پنج شنبه 28 آبان 1394, 09:44 صبح
هر هنرمندی در ابتدای از دیگران تقلید میکنه تا در نهایت به سبک خودش برسه ، برنامه نویسی هم یک هنره و مدتی زمان میبره تا شما به سبک خودتون در کد نویسی برسید .

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

برای بکارگیری بعضی چیزها مثلا Repository یا ViewModel و اینکه کجا باید قرار بگیرند و چطوری پیاده شوند باید احساس نیاز کنید. اگر یک پروژه رو پیاده کردید و از اینها استفاده نکردید و مشکلی هم پیش نیومد یعنی نیازی هم نداشتید یاد بگیرید و وقت شما تلف شده .

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

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

مثل اینکه شما میخواهید که یک نقاشی چهره بکشید. اینقدر روی چشم و ابرو کار میکنید که کامل میشه بعدا چونش خوب در نمیاد کل کارتون بهم میریزه و میشه سبک پست مدرن !

شما با یک طرح اولیه شروع کنید و اینقدر روش کار کنید که تکمیل بشه ، اولین کار شما شاهکار شما نیست . یک جایی کار رو تموم کنید و پروژه ی جدیدی شروع کنید.

hakim22
پنج شنبه 28 آبان 1394, 15:43 عصر
اولین نکته در پیاده سازی پروژه این است که پروژه ی شما قابلیت تغییر داشته باشد.

سوال اولی که در پیاده سازی پروژه پیش می آید نحوه ی نام گذاری پروژه ، محل قراردادن فولدرها و کلاس بندی است. یک نقطه ی بسیار مناسب برای شروع استفاده از ساختار پیازی است
ساختار پیازی یا Onion Structure که گاهی با عنوان یک معماری هم مطرح میشود پیشنهاداتی برای محل قراردادن کلاسهای مربوط به لایه های مختلف به شما میدهید.

از الزامات استفاده از این ساختار و کلا برنامه نویسی لایه ای استفاده از کنترل معکوس در پروژه است. در این راستا باید از ابزار IoC Container استفاده کنید. Ninject و Unity همینطور Castle Wisdor هرکدام ابزار مشابهی برای اینکار هستند. استفاده از کنترل معکوس یک باید است و چهره ی برنامه های شما را برای همیشه عوض خواهد کرد.

haamidd
شنبه 30 آبان 1394, 23:15 عصر
ممنون بابت پاسخ های کاملتون : )


من پیرو صحبت شما در اینترنت گشتم و نمونه پروژه ایی رو گرفتم که ساختارش به شکل زیر هست.
شما تایید میکنید این رو؟

136980