වෙබ් යෙදුම් ලියන විට, කන්ට්රෝලරයන්ට වැඩ බර වැඩියෙන් පැවතීම සාමාන්ය ගැටලුවක්. OrderController එකේ store() මැතඩ් එකේ 80 කට අධික ලයින් කේතයක් – ඉන්පුට් වලංගු කිරීම, නිෂ්පාදන පරීක්ෂාව, වට්ටම් ගණනය, ඇණවුම සුරක්ෂිත කිරීම, ඉන්වෙන්ටරි අඩු කිරීම, ඊමේල් යැවීම, ගබඩා දැනුම්දීම, සංඛ්යාලේඛන යාවත්කාල කිරීම – සියල්ල එකම තැනට එකතු වී ඇත. මෙවැනි කේතය එකම තැනින් වෙනත් API, CSV ආනයන, හෝ ක්රොන් ජොබ් වලට භාවිතා කිරීමට උත්සාහ කළාම, කේතය නකලීමට හෝ අඩු කිරීමට බොහෝ වෙයි.
මෙම ගැටලුවට විසඳුම Service Layer ය. මෙය යෙදුමේ ව්යාපාරික ලොජික් එකතු කර, කන්ට්රෝලර, CLI, Queue, API වැනි සියලු ඇතුළත් කිරීමේ මාර්ග වලින් නිදහස්ව භාවිතා කළ හැකි ස්ථානයක්. Service Layer එක Controller → Service → Repository/Model ආකාරයෙන් ක්රියා කරයි. කන්ට්රෝලරය HTTP ඉල්ලීම ලැබුවාම දත්ත වලංගු කර Service එකට එවයි. Service එක ව්යාපාරික නියමයන් පාලනය කර, අවශ්ය Repository හෝ Model වෙත කැඳවයි. Service එකට HTTP වගේ කිසිවක් නොදැනේ; එය ප්රාථමික වශයෙන් primitive data හෝ DTO ලබාගෙන, ප්රතිඵලයක් හෝ exception එකක් දෙනවා.
උදාහරණයක් ලෙස ArticleService එක ගත හැක. එය පළ කරන ලද ලිපි ලබා ගැනීම, slug මඟින් ලිපිය ගැලපීම, ටැග් අනුව ලිපි සෙවීම, සම්බන්ධිත ලිපි ලබා දීම වැනි ක්රියාකාරකම් එකම සේවාව තුළ සංග්රහ කරයි. BlogController, ApiController, CLI command (sitemap:generate) සියල්ලම එකම සේවාව භාවිතා කරයි – ලොජික් එක තනි තැනක, භාවිතය තෙවන තැනක.
Service vs Helper vs Utility
Service – ව්යාපාරික නියමයන් දැනගෙන, stateful (dependency injection) වේ. OrderService, PaymentService වැනි උදාහරණ.
Helper – සාමාන්ය utility functions, state නැති, domain knowledge නැත. Str::slug(), Path::resolve() වැනි.
Utility – static class එකක්, එකම කාර්යයක් කරයි. ImageResizer, CsvParser වැනි.
Service එකක් ඇතුළත් කළ යුතු අවස්ථා
- එකම ලොජික් එක බහු කන්ට්රෝලර හෝ CLI, API, Queue වැනි පරිසර වලින් භාවිතා කරන විට.
- කන්ට්රෝලරයේ ලොජික් රේඛාව 20+ ලයින් ඉක්මවන විට.
- ලොජික් එක unit test කිරීමට HTTP අවශ්ය නොවූ විට.
නමුත් සාමාන්ය CRUD මෙහෙයුම් වල, කන්ට්රෝලරය මාර්ගයෙන් Model::find() වගේ සරල කැඳවීම් පමණක් කරන විට Service Layer එක අවශ්ය නොවේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තාක්ෂණික වෘත්තියවේදීන්, විශ්ව විද්යාල සිසුන්, හා ස්ථාපිත ව්යාපාර සඳහා Service Layer එකේ ප්රයෝජන විශාලයි. කේතය තේරුම් ගැනීම පහසු වන අතර, බහු පද්ධති (web, mobile API, batch jobs) අතර ලොජික් නැවත ලිවීමේ අවශ්යතාව අඩු වේ. ඒ නිසා සංවර්ධන වේගය වැඩිවී, දෝෂ සංඛ්යාව අඩුවේ. තවත් වැදගත් කරුණක් වන්නේ, Service Layer එක unit testing සඳහා සකස් කරගත හැකි බැවින්, සිසුන්ට TDD (Test‑Driven Development) පුරුදු වීමට හොඳ අවස්ථාවක් ලැබේ. ව්යාපාරික පරිසරයේ, කේතයේ අලංකාරභාවය, නවීකරණය සහ අලුත්ම තාක්ෂණ (API, Cloud) සමඟ සම්බන්ධ කිරීමේ හැකියාව වැඩිවේ. එමෙන්ම, ශ්රී ලංකාවේ ගිණුම් සමාගම්, e‑commerce වෙළඳසල්, සහ තාක්ෂණික startup ගණනාවක් මෙම ආකෘතිය භාවිතා කර, පාරිභෝගික සේවාවන් වේගවත්, විශ්වාසනීය කර ගැනීමට සමත් වේ.
අවසන් වශයෙන්, Service Layer එක යනු සංකීර්ණ යෙදුම් සඳහා ඉතා සරල, පිරිසිදු, සහ පරිපාලක-friendly ආකෘතියකි. ඔබේ PHP/ Laravel ව්යාපෘතියේ කේතය බරපතල නම්, අදම Service Layer එකක් හඳුන්වා ගැනීමට කාලයයි.