اصل کپسوله سازی و یا Encapsulation در توسعه نرم افزار

یکی دیگر از اصول موفق توسعه نرم‌افزارها استفاده کردن از Encapsulation و یا کپسوله سازی است. Encapsulation به طور کلی به منظور عایق بندی کردن و یا جدا کردن قسمت های مختلف برنامه از یکدیگر مورد استفاده قرار می‌گیرد. با استفاده از Encapsulation می‌توان کامپوننت ها و لایه‌های مختلف برنامه را طوری پیاده سازی کرد که internal implementation و یا پیاده سازی درونی خود را به سادگی تغییر دهند و این تغییر منجر به شکسته شدن collaborator های آنها نشود. منظور از collaborator ها در واقع همان کلاس‌ها و یا Entity هایی هستند که به صورت همکارانه برای انجام رسالت اپلیکیشن مورد نظر با دیگر قسمت ها در ارتباط هستند. دلیل عدم شکسته شدن عملکرد بین کامپوننت ها و collaborator های آنها در زمان تغییر کردن کد درون یک کامپوننت در این است که external contracts ها و یا واسط هایی که یک کامپوننت را با collaborator های خود مرتبط می‌کند تغییر نکرده است. استفاده کردن مناسب است Encapsulation می‌تواند loose coupling و modularity را در طراحی وب اپلیکیشن ها فراهم کند. دلیل این موضوع نیز در این است که به سادگی می توان آبجکت ها و پکیج ها را با پیاده سازی های جایگزین جابجا کرد و به شرط اینکه Interface مابین آنها تغییر نکرده باشد همه چیز همچنان به کار خود ادامه بدهد.

در کلاس ها یک روش برای پیاده سازی Encapsulation محدود کردن دسترسی عناصر خارجی به State Internal یک کلاس می باشد. به عبارت دیگر اگر یک موجودیت خارجی بخواهد به State مربوط به یک عدد Object را تغییر بدهد باید این کار را از طریق توابع و یا property setter ها انجام بدهد. دسترسی مستقیم به private state و یا حالت خصوصی یک کلاس نباید پیاده‌سازی بگردد. در رابطه با این موضوع در بسته ی آموزش ویدئویی شی گرایی در سی شارپ و بسته ی آموزش ویدئویی شی گرایی پیشرفته در سی شارپ و آموزش ویدئویی اصول سالید (SOLID) در برنامه نویسی شی گرا صحبت کرده‌ایم. به طور مشابه کامپوننتهای یک اپلیکیشن و حتی خود اپلیکیشن می بایست Interface هایی را در اختیار collaborator ها قرار بدهند تا آنها در صورت نیاز به برقراری ارتباط از Interface ها استفاده کنند و به طور مستقیم به State درونی کامپوننت دسترسی نداشته باشند. این موضوع باعث می شود که طراحی داخلی یک وب اپلیکیشن بدون نگرانی از شکسته شدن ارتباطش با collaborator ها تکامل پیدا کند و به شرط اینکه Public Contract های مربوطه تغییر نکنند ارتباط و عملکرد برنامه همچنان ادامه پیدا کند.