فک کنم این اواخر زیاد اسم معماری های مختلف در طراحی اپلیکیشن ها رو شنیدید و خب الان با توجه به بالا رفتن اهمیت کار های تیمی، نگهداری بهتر از کد ها و همچنین توسعه نرم افزار، معماری ها ارزش خودشونو بیشتر بهمون نشون میدن، بهتره با من همراه باشید تا با هم بررسی کنیم که چرا باید از معماری در توسعه اپلیکیشن هامون استفاده کنیم.
اما معماری در توسعه و ساخت نرم افزار چی هست؟ خب دوست عزیزمون ویکی پدیا بهمون کمک میکنه:
"معماری نرمافزار یعنی ساختار و سازمان یک سیستم نرمافزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز میباشد. در واقع اجزاء را در حوزههای مرتبط به هم گروه بندی میکند. دیگر حوزههای مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز میشوند."
خب بزارید راحت تر بهتون بگم؛ معماری نرم افزار یعنی اینکه ما با رعایت یک سری استاندارد ها و قواعد، جوری کد بنویسیم که بشه پروژه رو به قسمت های مختلف، مستقل و بزرگ تقسیم بندی کرد؛ در آخر با مرتبط کردن و ارتباط این قسمت ها با هم، نرم افزارمون ساخته میشه! پس بصورت خلاصه معماری در برنامه نویسی یعنی تقسیم بندی پروژه و کد ها به قسمت های بزرگ و مشخص!
اما خب چرا از معماری در برنامه نویسی استفاده میکنیم؟
ببینید پروژه های نرم افزاری روز به روز دارن بزرگتر میشن و خب این بزرگ شدن گروه ها یا شرکت های نرم افزاری رو مجاب کرده که پروژه هاشون رو بصورت گروهی اداره کنن، اهمیت کار گروهی روز به روز داره مهم تر میشه و در نهایت اون نگهداری از کد ها هم مهم تر؛ استفاده از معماری به نرم افزار و سیستم شما ساختار میده و خوانایی کد رو بالاتر میبره، میتونه لایه های مختلف نرم افزارتون رو از هم جدا بکنه و هرکدوم از اونا رو مستقل از یکدیگر کنه؛ با این کار شما میتونید یه نرم افزاری بسازید که همه چیزش تفکیک شده است یعنی لایه View(نمایش) شما از لایه منطق و مدل هاتون جدا بشه و خب این خوانایی کد رو فوق العاده بالاتر میبره و نگهداری از کد ها رو خیلی بهتر میکنه.
اگر بخوام رو راست تر بگم درسته که میشه بدون معماری خاصی نرم افزار های زیادی رو ساخت، اما مطمئن باشید نمیتونید اونارو خوب مدیریت کنید و طبیعتا برای بروزرسانی نرم افزار یا... به مشکل میخورید، چرا؟ چون اون نرم افزار ها ساختار خاصی ندارند اگر بخوام بهتر بگم ما توی اون ها گم هستیم!!!
فرض کنید یه نرم افزاری رو ساختید که معماری خاصی نداره و اونو میدید به همکارتون که گسترشش بده، خب اگر دیدید فردا همکارتون باهاتون صمیمی نیست زیاد تعجب نکنید! چون سورس کدی که از شما به اون رسیده خیلی در هم ور هم بوده و خب خوندن و فهمیدن همچین سورس کد نرم افزاری خیلی خیلی وقت گیر و اعصاب خورد کن هست در ضمن احتمال بوجود اومدن باگ رو هم بیشتر میکنه، ولی تصور کنید نرم افزار شما کاملا لایه بندی شده باشه، منطق ها در پکیجی جدا، ویو ها و مدل ها هم در پکیج های جدا و بعد با استفاده از یه سری ارتباط این کامپوننت ها به هم وصل بشن خیلی خیلی خوانایی کد رو بالاتر میبره و نرم افزار رو برای توسعه، بسیار سریع تر، بهینه تر و بهتر میکنه!
یه مثال جالب:
فرض کنید دارید یک اپلیکیشن اندروید رو توسعه میدید، خب همونطوری مطلع هستید دستگاه های اندرویدی در سایز های مختلف وجود دارن(موبایل، فبلت، تبلت و...) و شما میخواید برای هرکدوم از این ها UI یا رابط کاربری خاص خودشونو بسازید! مثلا میخواید داخل تبلت دکمه ای بزرگ باشه و در داخل موبایل همون دکمه مثلا کوچک تر باشه! با استفاده از معماری شما لایه منطق هاتونو از لایه ویو(نمایش) جدا کردید، یک منطق نوشتید و حالا میخواید در دو صفحه اون منطق رو پیاده سازی کنید! میبینید که چقدر جالب میتونید یک منطق خاص رو به چندین و چند ویو یا صفحه در اندروید وصل کنید.
خلاصه اینکه حتما حتما سعی کنید معماری های نرم افزاری رو خوب یاد بگیرید و بسته به نیازتون از اون ها در نرم افزار هاتون استفاده کنید تا یک سیستم استاندارد با قابلیت نگهداری و توسعه بسیار عالی داشته باشید.
از معماری های مهم نرم افزاری میشه به موارد زیر اشاره کرد:
MVC: Model, View, Controller
MVP: Model, View, Presenter
MVVM: Model, View, ViewModel
And...