در این مقاله در نظر داریم تا در مورد “اجزای شی گرایی در وردپرس” بیشتر صحبت کنیم :

اجزا در وردپرس، صرف نظر از این که بخشی از افزونه یا بخشی از پوسته هستند ، می توانند به ساده تر شدن فرایند نگهداری یک پروژه کمک کنند (حتی به ساخت یک پروژه).

اما اگر شما از آن برای صفحات تنظیمات و یا صفحات مدیریت وردپرس استفاده می کنید، قسمتی از کار با آنها به شما اطمینان می دهد که در سمت سرور نیز پشتیبانی می شوند.

به طور کلی، این اجزا معمولا به عنوان منطق دامنه و یا با توجه به MCV، حتی ممکن است به عنوان بخشی از کد “مدل” یا ” کنترل” در نظر گرفته شوند.

ما امروز قصد داریم درمورد کلاس های شی گرا که مسئولیت مدیریت داده ها و کنترل هماهنگی اطلاعات ارائه شده در اجزا و چگونگی تعامل کاربر با آن را دارند صحبت کنیم.

نوشتن کلاس برای اجزا در وردپرس

در ابتدا، فکر می کنیم یکی از متداول ترین درخواست ها، ایجاد یک کلاس برای پیش خوان یا صفحات تنظیمات و یا هر چیزی که شما می خواهید آن را فراخوانی کنید باشد. در این مقاله، به پیش خوان می پردازیم.

طراحی شما ممکن است شبیه به این باشد:

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

طراحی آن می تواند بسیار بزرگ و سریع شود. و البته در مراحل انجام این کار، ایده ی داشتن یک کار و یا یک مسئولیت واحد از دست می رود و در نهایت یک مجموعه از توابع در یک کلاس قرار می گیرد که برنامه نویسی شی گرا را رعایت نمی کنند و در نتیجه تمامی تلاشمان برای تقسیم این الگو به اجزای مختلف به هدر می رود چون کد سمت سرور آن چیزی که مد نظر است را مدل نمی کند.

و نباید این طور باشد. این طور نیست؟ منظورمان این است که باید برای هر جزء کلاس های خاصی طراحی شود.

این به این معنی است که کلاس پیش خوان می تواند تمام قابلیت های مسئول رابط کاربری را در بالاترین سطح ممکن مانند کنترل اعتبار و ترتیب داده ها داشته باشد. سپس، می توان کلاس هایی برای هر کدام از اجزایی که قابلیت هایی مرتبط با این جزء دارند تعریف نمود.

یک نسخه ساده از این ایده ممکن است چیزی شبیه به شکل زیر باشد:

در این مدل، جزء مورد نظر، زمانی که نیاز به بازیابی چیزی داشت می تواند درون فایل مناظر کلاس خود عمل فراخوانی را انجام دهد، و یا زمانی که نیاز به تجزیه، ذخیره و … اطلاعات داشت می تواند آن را به یکی از توابع بفرستد و در نهایت، کد سمت سرور می تواند آن را مدل کند، و مسئولیت کمتری برای هر کلاس وجود دارد.

آیا یک الگوی طراحی برای این کار وجود دارد؟

راه هایی برای سازماندهی آن وجود دارد مثلا زمانی که شما این     افزونه را آغاز می کنید، همه چیز معرفی می شود و سپس اجزا از کلاس ها آگاه می شوند و کلاس ها از کلاس اصلی پیش خوان آگاه می شوند.

برخی ممکن است تلاش کنند تا زیرکلاس هایی از کلاس اصلی پیش خوان ایجاد کنند، اما زمانی که اجزا سعی می کنند تا درون آن فراخوانی انجام دهند ممکن است مشکلاتی به وجود آید؛ چون آن ها مجبورند اطلاعات بیشتری داشته باشند.

راه دیگر ممکن است از طریق تزریق وابستگی باشد که در آن شما می توانید کلاس های اجزا را گرفته و سپس کلاس اصلی پیش خوان را از طریق سازنده ی آن ها به آن تزریق کنید. اما پس از آن وردپرس باز هم نیاز به فراخوانی متدهای آن کلاس برای نمایش اجزا دارد.

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

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

هر چند فکر می کنیم بهترین روش استفاده از یک ابر کلاس و یک ابر الگو است و هنوز به دنبال یافتن روشی برای این کار می باشیم.