معماری های نرم افزار
بسم الله الرحمن الرحیم
معماری های نرم افزار
ساخت یک کارخانه نرم افزار
هر شرکت و مجموعه و گروهی طبیعتا برای انجام کارهای خود نیاز به یک مجموعه از قوانین دارد مثلا تمامی شرکت ها ساعتی را برای شروع و ساعتی را پایان کار در نظر می گیرند. همین قوانین بسیار ساده و ابتدایی می تواند باعث ایجاد منظم درون یک سازمان شود.
در دنیای نرم افزار نیز قوانینی وجود دارد که همه موظف به رعایت آن هستیم مثلا در زبان سی شارپ انتهای هر خط کد را با ";" مشخص می کنیم. شرکت هایی که از مدیران فنی با سوادی برخوردار هستند معمولا علاوه بر این قوانین، قوانین داخلی دیگری را برای انجام کارها وضع می کنند که می تواند بسیار کمک کننده باشد.
من پیشنهاد می کنم حتی اگر شما به تنهایی نیز کد نویسی می کنید بهتر است حتما یک مجموعه قوانینی را برای خود انتخاب کنید. این قوانین باید از موارد بسیار کوچک مانند نحوه اسم گذاری ها تا نوع کد نویسی، طراحی و پیاده سازی کلاس ها و فرایندهای میان آنها مشخص باشد.
طبیعتا ایجاد یک نظم و قانون برای انجام پروژه ها می تواند منافع زیادی را برای شما داشته باشد که بهتر است برای روشن تر شدن این موضوع چند مورد از آنها را بررسی کنیم:
مزایای استفاده از الگوهای برنامه نویسی
1- افزایش قابلیت پشتیبانی
در صورت نیاز می توانید تمام پروژه را به فرد و یا تیم دیگری واگذار کنید، تنها کاری که باید انجام شود ارائه قوانین کد نویسی شما می باشد. پس از مطالعه این قوانین که معمولا بیشتر از چند صفحه نخواهد شد هر فردی که صلاحیت انجام پروژه را داشته باشد طبیعتا می تواند به سادگی معماری و فرایندهای پروژه را درک کند.
در نهایت تنها کافی است پروژه را به او معرفی کنید، که البته پروژه ها نیز باید مستندات خود را داشته باشند، در نتیجه در این حالت به سادگی می توان افراد را بر روی نرم افزارهای مختلف شرکت سوئیچ کرد.
2- کاهش هزینه ها
تمامی سازمان ها و شرکتها پس از جذب نیروی مورد نظر خود، مدت زمان زیادی را برای آموزش و نحوه کار در سیستمشان هزینه می کنند. این در حالی است که اکثر نیروهای یک شرکت در مدت زمان کمتر از یک سال شرکت و سازمان خود را ترک می کنند. حال اگر این هزینه را در نظر بگیرید عملا هر شرکتی مدت زمانی بین 10 الی 30 روز را صرف معرفی فرایندها و روش های کاری خود به نیرو جدیدش می کند.
اگر تعداد ورود و خروج افراد و زمان آموزش آنها را محاسبه کنید مشاهده می کنید که چه هزینه و ضرر بزرگی در شرکت ها اتفاق می افتد. این مشکل در شرکت های ایران بسیار محرز است و معمولا مدیران شرکت هیچ تلاشی برای حل این مشکل ندارند حتی بعضا از این مشکل بی اطلاع هستند!
3- افزایش سرعت توسعه
تفاوتی نمی کند که سمت شما در یک شرکت چیست، زیرا اگر در بخش توسعه باشید و یا در بخش مدیریت باشید، در نهایت داشتن یک مجموعه قوانین منسجم و یکپارچه به شما کمک خواهد کرد.
تصور کنید در مدت زمان کاری خود در شرکتی بر روی 3 پروژه کوچک کار می کنید، اگر نوع کد نویسی و طراحی و پیاده سازی بخش های مختلف نرم افزار شما به صورت Generic باشد و یا به اصطلاح عامیانه آن دارای قابلیت توسعه و عمومیت باشد. شما می توانید بخش های مختلفی را که در هر یک از این سه نرم افزار طراحی می کنید در نرم افزارهای دیگر استفاده کنید.
این قابلیت در مرحله ی بالاتری از طراحی و پیاده سازی می تواند به صورت سرویس هایی ارائه شود که همه ی نرم افزار ها از آن استفاده می کنند، در این حالت که بسیار ایده آل می باشد با به بر روز شدن یک سرویس تمامی نرم افزارها از قابلیت های جدید این سرویس بهره مند می شوند.
4- انتقال نیروها
طبیعتا در هر شرکت بر اساس نیازمندی و تصمیماتی که اتخاذ می شود، نیروها می بایست در پروژه های مختلف بتوانند سمت خودشان فعالیت کنند. بدین منظور که اگر شرکتی دارای 10 پروژه باشد، باید بتوان تمامی بخش های ثبت نام کاربران را به یک نیرو سپرد! از اعمال تغییرات در پروژه های گذشته گرفته تا شروع پیاده سازی این بخش در یک پروژه جدید.
اما عملا این اتفاق نمی تواند رخ دهد، زیرا برای نوشتن یک خط کد میان کدهای برنامه نویسان دیگر باید ساعت ها کدهای آن ها را خواند تا متوجه شویم چطور باید بخش خود را در سیستم اضافه کنیم. در نتیجه شرکت ها از یک تیم برای توسعه یک سیستم استفاده می کنند که این تیم تا انتهای پروژه معمولا ثابت می ماند. حتی بعضا برخی از شرکتها در پشتیبانی نرم افزار های خود از یکی از افراد همان تیم توسعه استفاده می کنند.
این روش قائم به فرد است، که اگر فرد مذکور شرکت را ترک کند بحرانی شرکت را فراخواهد گرفت.
اما در واقع باید افراد سمت هایی داشته باشند و بتوانند بر اساس قوانین و روش هایی که از قبل مشخص هستند در پروژه های مختلف و در حوزه سمتشان فعالیت کنند.
یکی از دلایلی که در کشور ما افراد در سمت های مختلف مثل طراحی پایگاه داده، کد نویسی UI و کد نویسی back-end و... فعالیت می کنند، نبود قوانین و روش های یکپارچه است. اگر در شرکتهایی که هر بخش سیستم توسط یک فرد طراحی می شود و (از مرحله طراحی پایگاه داده تا مرحله UI و در نهایت کد نویسی Back-end آن) را سوال کنید معمولا پس از علت اول یا همان کافی نبودن بودجه پروژه برای تخصیص نیروی متخصص، علت بعدی سخت بودن انجام فعالیت ها توسط چند نفر و همچنین مدیریت یکپارچه کردن آنها می باشد.
برای روشن تر شدن فواید ساخت یک مجموعه قوانین و معماری، می توان موارد بسیار زیادی را مطرح کرد اما تصور می کنم تا همین جا برای ترغیب کردن شما به خواندن ادامه این مقاله کفایت می کند :)
دوره آموزشی ایجاد معماری نرم افزار
قصد داریم در این دوره آموزشی ابتدا برخی مفاهیم و تئوری های طراحی ساختار و معماری را معرفی کنیم و سپس به سراغ ایجاد یک پروژه با قابلیت های ساختارمندی و استاندارد سازی برویم.
در نهایت پس از بخش های تئوری این دوره آموزشی یک معماری مناسب را برای پروژه های مختلف با هم طراحی پیاده سازی خواهیم کرد تا انشالله از این پس شما نیز بتوانید با دانش و سرعت بیشتری نرم افزارهای خود را طراحی کنید.
در این دوره آموزشی سعی می کنیم به جنبه های مختلف طراحی و ساخت یک نرم افزار بپردازیم، در واقع اینطور تصور خواهیم کرد که می خواهیم یک شرکت نرم افزاری را تاسیس کنیم طبیعتا این شرکت مانند یک کارخانه می باشد و محصول آن نرم افزارهای مختلف خواهد بود. در نتیجه اولین چیزی که باید در یک کارخانه اتفاق بیافتد ساخت، تعیین، ایجاد نظم بین نوار نقاله ها و بخش های ورودی و خروجی مختلف است تا محصول این کارخانه با بهترین کیفیت و سرعت ایجاد شود.
در این دروه آموزشی بخش های مختلفی را بررسی خواهیم کرد از تعریف متغییر ها تا نحوه نگه داری کدها و... انشالله که این دوره آموزشی بتواند به شما کمک کند.