اصل Persistence Ignorance در توسعه نرم افزار

یکی دیگر از اصول بسیار مهم در توسعه نرم‌افزارهای موفق در نظر گرفتن اصل Persistence ignorance و یا PI می باشد. اگر بخواهیم این دو واژه را ترجمه کنید می بایست از عبارت جاهل به ذخیره‌سازی استفاده کنیم. به بیان ساده اصل Persistence ignorance به این معناست که Type هایی که قرار است در بانک های اطلاعاتی ذخیره بگردند نباید توسط تغییر در تکنولوژی ذخیره‌سازی تغییر کند. به این نوع از Type ها در فریمورک .Net اصطلاحاً POCO و یا Plain Old CLR Objects می گویند. این نوع از کلاسها از هیچ Base Class خاصی ارث بری نکرده و هیچ Interface خاصی را پیاده سازی نمی‌کنند. بنابراین Persistence ignorance می‌باشند. به عبارت دیگر اگر تکنولوژی دسترسی پیدا کردن به داده ها از Entity Framework Core به NHibernate نیز تغییر کرد این کلاس‌ها هیچ گونه تغییری را لحاظ نخواهند نمود. این موضوع خود به Loosely Coupled شدن برنامه نیز کمک خواهد کرد. در رابطه با یادگیری این دو تکنولوژی نیز می توانید از لینک بسته آموزش ویدیویی شروع به کار با Entity Framework Core و بسته ی آموزش ویدئویی کار با NHibernate در سی شارپ استفاده کنید. اصل Persistence ignorance از این جهت اهمیت دارد که اجازه می‌دهد business model برنامه به چندین روش مختلف ذخیره شود و انعطاف‌پذیری بیشتری در برنامه لحاظ بگردد. تغییر ایجاد کردن در مکانیزم Persistence سازی ممکن است با تغییر نیازمندی ها دستخوش تغییرات بشود. برای مثال ممکن است به جای استفاده کردن از SQL Server نیاز به استفاده کردن از MongoDB در برنامه اتفاق بیفتند. این موضوع نباید عملاً بر روی کلاس های مربوط به برنامه تغییر ایجاد کند. برخی از نشانه هایی که اصل Persistence ignorance را نقض می کنند شامل موارد زیر هستند:

  1. زمانی که در کلاس‌های خود می بایست حتما از یک Base Class کلاس ارث بری کنید تا بتوانید آن کلاس‌ها را ذخیره سازی نمایید.
  2. دو زمانی که نیاز است از یک اینترفیس خاص استفاده کرده و آن را پیاده سازی کنید تا بتوانید محتوا و داده‌های مربوط به یک کلاس را در دیتابیس ذخیره کنید.
  3. زمانی که یک کلاس خود وظیفه ذخیره کردن خود را خواهد داشت. برای مثال در الگوی Active Record همچنین اتفاقی می‌افتد. در رابطه با این موضوع در بسته ی آموزش ویدئویی معماری نرم افزارهای پیشرفته در دات نت صحبت کرده‌ایم.
  4. زمانی که توابع سازنده بدون پارامتر اجباری لحاظ می کنید.
  5. زمانی که در تعریف کردن پروپرتی ها از کلید واژه Virtual استفاده می کنید.
  6. زمانی که از Attribute های خاصی برای ذخیره کردن یک کلاس در دیتابیس استفاده می کنید.

اگر یک کلاس هرکدام از ویژگی‌ها و یا رفتارهای بالا را داشته باشند در واقع Coupling بین Type ها و تکنولوژی Persistence سازی ایجاد شده است. این موضوع باعث می‌شود که ایجاد تغییر در استراتژی های Data Access در برنامه بسیار دشوار بگردد و با لحاظ کردن هر تغییری نیاز به تغییر ایجاد کردن در خود کلاس ها نیز داشته باشیم.