الگوی طراحی Parameter Object در جاوا

مشکل

شاید براتون پیش اومده باشه که یه متدی داشته باشید که پارامترها یا argument های زیادی بگیره و این موضوع کد شما رو کثیف کنه. همونطور که میدونید متدها در جاوا میتونن حداکثر 255 پارامتر رو پوشش بدن یا بهتره بگیرم، 255 یونیت. برای درک بهتر یونیت به این لینک مراجعه کنید. شاید بگید 255 که خیلی زیاده! درسته زیاده اما من پروژه ای رو داشتم که نیاز شده بیش از بود 255 تا پارامتر رو داشته باشه. در ضمن توی خیلی از الگوهای کد تمیز نبایستی تعداد پارامترهای یه متد از 3 تا تجاوز کنه. توی کتاب #کد_تمیز از #رابرت_مارتین یا همون Uncle_Bob# هم اشاره شده این موضوع. اینم سندش

راهکار: استفاده از الگوی طراحی Parameter Object

گام اول:

یه کلاس داخلی (inner class) یا کلاس عمومی درست کنید که تمامی پارامترهای متد رو به عنوان ویژگی یا attribute داشته باشه. کلاس رو به صورت immutable طراحی کنید.

گام دوم:

برای راحتی کار میتونید یه کلاس builder هم براش بسازید تا راحت تر بتونید از این کلاس شیء جدید ایجاد کنید. حالا یا از @builder در lombok یا خودتون بسازید.

گام آخر

یه constructor از کلاس پارامترهای خودتون برای کلاس اصلی ایجاد کنید.

در زیر یه نمونه از کد و طراحی کلاس رو آوردم:

نمونه کلاس قبل از تغییرات:

تو مثال زیر کلاس SearchService دو متد search داره که میخوایم با استفاده از الگوی طراحی MethodParameter اصلاحش کنیم.

https://gist.github.com/m-tilab/241b72646cc83e3dda20b2f08f4e769c


بعد از تغییرات

تو کلاس زیر یه زیر کلاس به نام ParameterObject ایجاد شده که یه سازنده از نوع builder داره

https://gist.github.com/m-tilab/ca5e5554ce096a090ca6d9c169e70e3b

حالا ما برای استفاده ازش میتونیم بنویسیم:

https://gist.github.com/m-tilab/b770ce1c079fe9d0b93d58ab00cc3980

دیاگرامش رو هم میتونید اینجا ببینید:

نحوه استفاده از الگوی طراحی parameter Object در جاوا
نحوه استفاده از الگوی طراحی parameter Object در جاوا


شاد باشید!