TypeScript ව්යාපෘතිවලදී Dependency Injection (DI) අවශ්යයි කියලා හැමෝම දන්නවා. ඒකට InversifyJS, tsyringe, NestJS වගේ පොඩ් එකක් එක්ක reflect‑metadata ඇතුළත් කරලා, @Injectable() වගේ ඩෙකොරේටර් ලගා කරලා, කන්ටේනර එකක බයින්ඩින් ලියා, පසුකාලීනව resolve කරලා වැඩ කරනවා.
ඒ ආකාරය අඩුපාඩු රහිත නැහැ. රන්ටයිම් රෙෆ්ලෙක්ශන්, බන්ඩල් බර වැඩිවීම, ස්ට්රින් ටෝකන් භාවිතය නිසා නම වෙනස් කළාම හෝ ලියා නොදැක්කොත් runtime දෝෂයක් පෙනෙන්නෙ. තවද, කන්ටේනරේ තියෙන සියලු කෝඩ් එකම bundle එකට ඇතුළත් වීම නිසා tree‑shaking අඩුයි. පරීක්ෂණයක් කරනකොටද, තවත් කන්ටේනර, මොඩියුල සකස් කරලා mock එකක් inject කරලා පරීක්ෂා කරන්න වෙන කටයුතු වැඩිපුරයි.
ඉතින්, මේ සියල්ලක් compile‑time එකේම සලසා ගන්නා, රන්ටයිම් overhead එකක් නැති ක්රමයක් තිබෙනවා – Reader Pattern. Reader<R, A> කියන්නේ (context: R) => A වගේ ෆන්ක්ශන් එකක්. R කියන්නේ ඒ ෆන්ක්ශන් එකට අවශ්ය දත්ත, A කියන්නේ එය ලබා දෙන ප්රතිඵල. ඕනෑම සේවාවක්, ලොගර් එකක්, API URL එකක් වගේ දේවල් context එකේ කොටසක් ලෙස සලකන්න පුළුවන්.
උදාහරණයක් ලෙස, Config interface එකක් නිර්මාණය කරලා, getApiUrl, buildHeaders වගේ ෆන්ක්ශන් ලියලා, අවසානයේ R.run මගින් context එක ලබා දී ප්රතිඵල ගන්න පුළුවන්. ask(), chain, map, chainw වගේ ඔපරේටර්ස් භාවිතා කරලා, බහු context එකක් එකතු කරලා, ලොග් කිරීම, DB query කිරීම වගේ කාර්යයන් සරලව සම්බන්ධ කරගන්න පුළුවන්.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ පුරෝගාමී සිසුන්, නවක සංවර්ධකයන් සහ ස්ථාපිත සමාගම් සඳහා මේ ක්රමය විශාල වාසි ලබා දෙයි:
- ඉගෙනුම් වේගය – DI සදහා කන්ටේනර, ඩෙකොරේටර් වැනි අමතර ව්යාපෘති නොවී, TypeScript type system එකම භාවිතා කරලා කේතය ලියන්න පුළුවන්.
- කේත ප්රමාණය අඩුවීම – රන්ටයිම් රෙෆ්ලෙක්ශන් නැති බැවින් bundle size එක අඩුයි, එයින් වෙබ් ඇප්ස්, මොබයිල් ඇප්ස් වේගවත් වේ.
- දෝෂ හඳුනා ගැනීම – compile‑time එකේම missing dependency පරීක්ෂා කරගත හැකි බැවින් runtime crash අඩුයි.
- පරීක්ෂණ පහසුව – mock context එකක් සෑදීම සරල, test file එකකින්ම සියලු dependency replace කරගත හැක.
- ව්යාපාරික වාසි – කේතය maintainable, scalable වන නිසා දිගුකාලීන ව්යාපාරික පරිසරයට ගැලපේ.
ඉතින්, TypeScript භාවිතා කරන ඕනෑම සංවර්ධකයකුට Reader Pattern එක අත්හදා බලන්න වඩාත්ම ගුණාත්මකයි. කන්ටේනර, ඩෙකොරේටර්, reflect‑metadata වගේ අමතර සම්පත් අවශ්ය නොවී, සරල, පවතින type system එකම භාවිතා කරලා DI ක්රමයක් ලබා ගත හැක.
අදහස්, ප්රශ්න, හෝ ඔබේ පළපුරුද්ද share කරන්න. තවත් තාක්ෂණික ලිපි සඳහා අපගේ පුවත් පත්රිකාව අනුගමනය කරන්න.