
پترنها، پرینسیپلها و قوانین Clean Code همه زاییده یک «درد» هستند؛ دقیقا همون دردی که باعث شد پترن KIP (Keep It Private) رو خلق کنم.
🛑 مشکل چی بود؟
موقع توسعه کامپوننتها (چه بزرگ، چه کوچیک)، هر کامپوننت از unitهای مختلفی تشکیل میشه که فقط و فقط مختص همون کامپوننت و اسکوپ (Scope) اونه. وقتی همه اینها رو داخل یک فایل تجمیع میکردیم، فایل کامپوننت تبدیل میشد به یک غول پیکرِ سختفهم!
🤔 راهحل موقت و دردسرساز:
برای خلوت کردن فایل، میاومدیم unitهای مختلف (مثل hook, utility, style, type) رو میبردیم توی فولدرهای گلوبال و بعد توی کامپوننت ایمپورت میکردیم.
نتیجه؟ کثیف شدن و بزرگ شدن محیط گلوبال! کدهایی که کاملاً specific و مختص یک کامپوننت بودن، به بیرون نشت (Leakage) میکردن.
شاید تو ذهنتون بیاد که: «خب باید کُد رو از اول جوری گلوبال بنویسی که بعداً بشه همهجا استفادهاش کرد». اما واقعیت اینه که در اکثر مواقع این اتفاق نمیافته! بدتر از همه، این کار منطق و unitها رو از اصل کد (یعنی کامپوننت) دور میکنه و بار ذهنی (Cognitive Load) دیباگ و فهم کد رو به شدت بالا میبره.
✅ اینجا بود که KIP متولد شد:
به جای بردن unitها به محیط گلوبال یا چپوندن اونها تو یک فایل، بیا و در فولدرِ خودِ کامپوننت، unitهای مختلف رو بسته به نیاز همون کامپوننت تعریف کن.
Keep It Private! خصوصی نگهشون دار؛ فقط برای همون کامپوننت. در نهایت فایل index به عنوان Gateway عمل میکنه و تصمیم میگیره چه چیزهایی رو میخوای به بیرون هدایت کنی.
📂 ساختار به این شکل میشه (پیشوند _ یعنی private):
_hook.ts
_type.ts
_slots.tsx
_component.tsx
...
index.ts (Gateway / API Boundary)
با این معماری، هم Componentها تمیز و خوانا میمونن، هم گلوبال کثیف نمیشه، و هم Scale کردن پروژه بینهایت راحتتر میشه.
پروژه گیتهابشم میتونین اینجا ببینین: https://github.com/Miladxsar23/kip-pattern