برنامه نویسی

پیاده سازی Soft Delete در Spring WebFlux با R2DBC

Summarize this content to 400 words in Persian Lang
مدیریت داده‌ها یک جزء اساسی در توسعه نرم‌افزار است، به‌ویژه هنگام مدیریت رکوردهایی که نیاز به حذف از استفاده فعال دارند. به جای حذف دائمی رکوردها (روشی به نام “حذف سخت”)، بسیاری از برنامه ها از تکنیکی به نام “حذف نرم” استفاده می کنند. رویکرد “حذف نرم” راه حلی است که به طور گسترده مورد استفاده قرار می گیرد که رکوردها را بدون حذف دائمی به عنوان غیرفعال علامت گذاری می کند و امکان بازیابی آسان داده ها و ردیابی تاریخی را فراهم می کند.

در حال حاضر، برخلاف Spring Data JPA و Hibernate، Spring Data R2DBC حاشیه نویسی داخلی را برای مدیریت خودکار حذف نرم ارائه نمی دهد. در نتیجه، توسعه دهندگان برای دستیابی به عملکردهای مشابه به استفاده از پیاده سازی ها یا پرس و جوهای مخزن سفارشی متوسل می شوند.

در این مقاله به بررسی soft delete، مزایای آن و نحوه پیاده سازی آن در برنامه Spring WebFlux با R2DBC می پردازیم.

Soft Delete چیست؟

حذف نرم یک روش مدیریت داده است که در آن رکوردها بدون حذف از پایگاه داده به عنوان غیرفعال یا “حذف” علامت گذاری می شوند. به طور معمول، این شامل اضافه کردن یک فیلد به موجودیت است، مانند deleted (یک بولی) یا deletedDate (مهر زمانی)، تا نشان دهد که یک رکورد دیگر فعال نیست. به‌جای حذف دائمی داده‌ها، یک حذف نرم رکورد را به‌عنوان حذف منطقی علامت‌گذاری می‌کند و آن را از جستارهای استاندارد پنهان می‌کند و در عین حال آن را برای بازیابی یا ممیزی احتمالی حفظ می‌کند.

مزایای Soft Delete

بازیابی اطلاعات: حذف نرم امکان بازیابی آسان داده ها را فراهم می کند. اگر رکوردی به طور تصادفی حذف شود، می توان آن را با تنظیم مجدد پرچم به سرعت “حذف کرد” و اطمینان حاصل کرد که هیچ داده ای برای همیشه از بین نمی رود.
داده های تاریخی: حذف نرم یک مسیر حسابرسی را فراهم می کند. سازمان‌ها اغلب نیاز به حفظ داده‌های تاریخی برای اهداف مطابقت یا گزارش دارند، و حذف نرم این امکان را بدون ازدحام کردن داده‌های فعال فراهم می‌کند.
یکپارچگی داده ها: در سیستم هایی با روابط پیچیده، حذف دائم یک رکورد می تواند باعث شکسته شدن لینک ها و ناسازگاری داده ها شود. حذف نرم با دست نخورده نگه داشتن داده های مرتبط و در عین حال علامت گذاری رکوردهای حذف شده به عنوان غیرفعال، این مشکل را برطرف می کند.
امنیت و انطباق: مقررات اغلب نیاز به نگهداری داده ها برای دوره های خاص دارند. حذف نرم به توسعه دهندگان این امکان را می دهد که این نیازهای انطباق را بدون در دسترس قرار دادن داده ها برای کاربران عادی برآورده کنند.

نحوه پیاده سازی Soft Delete با Spring Reactive و R2DBC

اگر شما علاقه مند به اجرای این کار خود هستید، من یک کد شروع آماده کرده ام – یک برنامه وبلاگ ساده با نقاط پایانی اولیه CRUD و موارد تست واحد. با استفاده از این لینک می توانید به کد شروع از مخزن GitHub من دسترسی پیدا کنید. بنابراین، بیایید درست به آن بپردازیم.

مرحله 1: یک فیلد برای علامت گذاری رکوردها به عنوان حذف شده اضافه کنید

برای پیاده سازی این، یک فیلد در کلاس entity خود اضافه کنید تا وضعیت حذف را نشان دهد. یک رویکرد موثرتر ایجاد یک کلاس انتزاعی است (AbstractSoftSoftDeletableEntity، فیلد وضعیت حذف را در آن تعریف کنید و از کلاس entity خود بخواهید این کلاس انتزاعی را گسترش دهد. این فیلد می تواند یک بولی (حذف شده) باشد که نشان می دهد رکورد حذف شده است یا یک مهر زمانی (deletedDate) برای تعیین زمان حذف آن. توصیه می‌کنم از مهر زمانی استفاده کنید، زیرا جزئیات بیشتری از زمان حذف را ارائه می‌دهد:

مرحله 2: کلاس entity را برای گسترش کلاس انتزاعی تغییر دهید

تغییر کلاس موجودیت برای گسترش AbstractSoftSoftDeletableEntity سطحی از انتزاع و تفکیک نگرانی را ایجاد می کند، بنابراین به اصل مسئولیت واحد طراحی شی گرا پایبند است.

مرحله 3: ایجاد یک مخزن سفارشی عمومی با گسترش SimpleR2dbcRepository

بسیاری از منابع در زمینه اجرای حذف نرم استفاده از یک مخزن سفارشی برای هر موجودیت را توصیه می کنند، که مدیریت آن زمانی که یک برنامه دارای موجودیت های متعدد است، می تواند دست و پا گیر و سخت باشد. یک رویکرد بهتر استفاده از یک رابط مخزن عمومی در حالی که پیاده سازی های سفارشی برای روش های اساسی مانند شمارش می کند، deleteById، حذف همه، findById، و دیگران.

در قطعه بالا، من این را دارم SoftDeleteRepositoryImpl اجرای SoftDeleteRepository رابط، که با فهرست کردن روش‌های انتزاعی بهبود یافته برای عملیات حذف نرم، لایه انتزاعی دیگری را فراهم می‌کند.

مرحله 4: تغییر مخزن موجودیت برای گسترش رابط مخزن سفارشی

در نهایت، رابط مخزن اصلی را با گسترش دادن تغییر دهید SoftDeleteRepository و ارائه نام کلاس موجودیت و نوع داده id به عنوان آرگومان های نوع عمومی. همچنین یک پیاده سازی پیش فرض برای findById، پیدا کردن همه، deleteById، و حذف همه روش هایی برای استفاده از پیاده سازی های سفارشی حذف نرم تعریف شده در SoftDeleteRepository رابط کاربری

مرحله 5: Soft Delete را در لایه سرویس پیاده سازی کنید

پس از انجام مراحل بالا، همه چیز آماده است. هیچ پیاده سازی بیشتری در لایه سرویس دامنه مورد نیاز نیست. قابل ذکر است، هر دو مورد آزمایش کنترلر و واحد نیز نیازی به هیچ تغییری ندارند.

برای واکشی همه رکوردها (از جمله رکوردهای حذف شده) یا رکوردهای حذف شده، می توانید از روش های پرس و جو همانطور که در قطعه زیر نشان داده شده است استفاده کنید:

نتیجه گیری

حذف نرم روشی موثر و انعطاف‌پذیر برای مدیریت داده‌ها بدون حذف دائمی آن‌ها است که آن را برای برنامه‌هایی که نیاز به بازیابی داده‌ها، مطابقت یا ردیابی داده‌های تاریخی دارند، ایده‌آل می‌کند. در این راهنما، ما در مورد چیستی حذف نرم، مزایای آن و نحوه پیاده سازی آن در برنامه Spring WebFlux با R2DBC بحث کردیم.

می توانید کد منبع کامل را در GitHub پیدا کنید

مدیریت داده‌ها یک جزء اساسی در توسعه نرم‌افزار است، به‌ویژه هنگام مدیریت رکوردهایی که نیاز به حذف از استفاده فعال دارند. به جای حذف دائمی رکوردها (روشی به نام “حذف سخت”)، بسیاری از برنامه ها از تکنیکی به نام “حذف نرم” استفاده می کنند. رویکرد “حذف نرم” راه حلی است که به طور گسترده مورد استفاده قرار می گیرد که رکوردها را بدون حذف دائمی به عنوان غیرفعال علامت گذاری می کند و امکان بازیابی آسان داده ها و ردیابی تاریخی را فراهم می کند.

در حال حاضر، برخلاف Spring Data JPA و Hibernate، Spring Data R2DBC حاشیه نویسی داخلی را برای مدیریت خودکار حذف نرم ارائه نمی دهد. در نتیجه، توسعه دهندگان برای دستیابی به عملکردهای مشابه به استفاده از پیاده سازی ها یا پرس و جوهای مخزن سفارشی متوسل می شوند.

در این مقاله به بررسی soft delete، مزایای آن و نحوه پیاده سازی آن در برنامه Spring WebFlux با R2DBC می پردازیم.

Soft Delete چیست؟

حذف نرم یک روش مدیریت داده است که در آن رکوردها بدون حذف از پایگاه داده به عنوان غیرفعال یا “حذف” علامت گذاری می شوند. به طور معمول، این شامل اضافه کردن یک فیلد به موجودیت است، مانند deleted (یک بولی) یا deletedDate (مهر زمانی)، تا نشان دهد که یک رکورد دیگر فعال نیست. به‌جای حذف دائمی داده‌ها، یک حذف نرم رکورد را به‌عنوان حذف منطقی علامت‌گذاری می‌کند و آن را از جستارهای استاندارد پنهان می‌کند و در عین حال آن را برای بازیابی یا ممیزی احتمالی حفظ می‌کند.

مزایای Soft Delete

  1. بازیابی اطلاعات: حذف نرم امکان بازیابی آسان داده ها را فراهم می کند. اگر رکوردی به طور تصادفی حذف شود، می توان آن را با تنظیم مجدد پرچم به سرعت “حذف کرد” و اطمینان حاصل کرد که هیچ داده ای برای همیشه از بین نمی رود.
  2. داده های تاریخی: حذف نرم یک مسیر حسابرسی را فراهم می کند. سازمان‌ها اغلب نیاز به حفظ داده‌های تاریخی برای اهداف مطابقت یا گزارش دارند، و حذف نرم این امکان را بدون ازدحام کردن داده‌های فعال فراهم می‌کند.
  3. یکپارچگی داده ها: در سیستم هایی با روابط پیچیده، حذف دائم یک رکورد می تواند باعث شکسته شدن لینک ها و ناسازگاری داده ها شود. حذف نرم با دست نخورده نگه داشتن داده های مرتبط و در عین حال علامت گذاری رکوردهای حذف شده به عنوان غیرفعال، این مشکل را برطرف می کند.
  4. امنیت و انطباق: مقررات اغلب نیاز به نگهداری داده ها برای دوره های خاص دارند. حذف نرم به توسعه دهندگان این امکان را می دهد که این نیازهای انطباق را بدون در دسترس قرار دادن داده ها برای کاربران عادی برآورده کنند.

نحوه پیاده سازی Soft Delete با Spring Reactive و R2DBC

اگر شما علاقه مند به اجرای این کار خود هستید، من یک کد شروع آماده کرده ام – یک برنامه وبلاگ ساده با نقاط پایانی اولیه CRUD و موارد تست واحد. با استفاده از این لینک می توانید به کد شروع از مخزن GitHub من دسترسی پیدا کنید. بنابراین، بیایید درست به آن بپردازیم.

مرحله 1: یک فیلد برای علامت گذاری رکوردها به عنوان حذف شده اضافه کنید

برای پیاده سازی این، یک فیلد در کلاس entity خود اضافه کنید تا وضعیت حذف را نشان دهد. یک رویکرد موثرتر ایجاد یک کلاس انتزاعی است (AbstractSoftSoftDeletableEntity، فیلد وضعیت حذف را در آن تعریف کنید و از کلاس entity خود بخواهید این کلاس انتزاعی را گسترش دهد. این فیلد می تواند یک بولی (حذف شده) باشد که نشان می دهد رکورد حذف شده است یا یک مهر زمانی (deletedDate) برای تعیین زمان حذف آن. توصیه می‌کنم از مهر زمانی استفاده کنید، زیرا جزئیات بیشتری از زمان حذف را ارائه می‌دهد:

مرحله 2: کلاس entity را برای گسترش کلاس انتزاعی تغییر دهید

تغییر کلاس موجودیت برای گسترش AbstractSoftSoftDeletableEntity سطحی از انتزاع و تفکیک نگرانی را ایجاد می کند، بنابراین به اصل مسئولیت واحد طراحی شی گرا پایبند است.

مرحله 3: ایجاد یک مخزن سفارشی عمومی با گسترش SimpleR2dbcRepository

بسیاری از منابع در زمینه اجرای حذف نرم استفاده از یک مخزن سفارشی برای هر موجودیت را توصیه می کنند، که مدیریت آن زمانی که یک برنامه دارای موجودیت های متعدد است، می تواند دست و پا گیر و سخت باشد. یک رویکرد بهتر استفاده از یک رابط مخزن عمومی در حالی که پیاده سازی های سفارشی برای روش های اساسی مانند شمارش می کند، deleteById، حذف همه، findById، و دیگران.

در قطعه بالا، من این را دارم SoftDeleteRepositoryImpl اجرای SoftDeleteRepository رابط، که با فهرست کردن روش‌های انتزاعی بهبود یافته برای عملیات حذف نرم، لایه انتزاعی دیگری را فراهم می‌کند.

مرحله 4: تغییر مخزن موجودیت برای گسترش رابط مخزن سفارشی

در نهایت، رابط مخزن اصلی را با گسترش دادن تغییر دهید SoftDeleteRepository و ارائه نام کلاس موجودیت و نوع داده id به عنوان آرگومان های نوع عمومی. همچنین یک پیاده سازی پیش فرض برای findById، پیدا کردن همه، deleteById، و حذف همه روش هایی برای استفاده از پیاده سازی های سفارشی حذف نرم تعریف شده در SoftDeleteRepository رابط کاربری

مرحله 5: Soft Delete را در لایه سرویس پیاده سازی کنید

پس از انجام مراحل بالا، همه چیز آماده است. هیچ پیاده سازی بیشتری در لایه سرویس دامنه مورد نیاز نیست. قابل ذکر است، هر دو مورد آزمایش کنترلر و واحد نیز نیازی به هیچ تغییری ندارند.

برای واکشی همه رکوردها (از جمله رکوردهای حذف شده) یا رکوردهای حذف شده، می توانید از روش های پرس و جو همانطور که در قطعه زیر نشان داده شده است استفاده کنید:

نتیجه گیری

حذف نرم روشی موثر و انعطاف‌پذیر برای مدیریت داده‌ها بدون حذف دائمی آن‌ها است که آن را برای برنامه‌هایی که نیاز به بازیابی داده‌ها، مطابقت یا ردیابی داده‌های تاریخی دارند، ایده‌آل می‌کند. در این راهنما، ما در مورد چیستی حذف نرم، مزایای آن و نحوه پیاده سازی آن در برنامه Spring WebFlux با R2DBC بحث کردیم.

می توانید کد منبع کامل را در GitHub پیدا کنید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا