Wada karana than hama ekakama mama kale meka machanසුපිරි.
Thanks මචන් උඹේ knowledge එක share කරනවට.
Kawru hari goda yanawa nam mata e sathuta athi ban
Wada karana than hama ekakama mama kale meka machanසුපිරි.
Thanks මචන් උඹේ knowledge එක share කරනවට.
honda knowledge ekak awa meken.උඩ ප්රශ්නෙට මම දුන්න උත්තරේ.
once I looked at the question I see some design patterns involve. it's a guess, so my initial answer was this
මම පටන් ගත්තේ repository වලින්. මුලින්ම IRepositoryBase interface එකක් හදාගන්නවා SQL වලට. ඉන්ටර්ෆේස් එකක් ගත්තේ DI සිස්ටම් එකට inject කරන්න ඕනේ නිසා. පස්සේ මම මේ රිපෝ බේස් ඉන්ටර්ෆේස් එක ඉම්ප්ලිමන්ට් කරලා RepositoryBase ක්ලාස් එකක් හදනවා. sql පැත්තේ ඩේටා ගන්න මේක හොදටම ඇති.
මේ විදිහටම no-SQL පැත්තටත් IRepositoryBase interface එකක් හදාගන්නවා. RepositoryBase එකකුත් හදාගන්නවා. මේ දෙකම IOC එකට ඉන්ජෙක්ට් කරන්න පුළුවන් කෙලින්ම.
දැන් මේ දෙකම තියනවා. අපිට තියෙන්නේ දෙකෙන් එකක් තෝරාගන්න අවශ්යතාව අනුව. මම කිව්වා මම සිම්පල් ස්විච් එකක් දාල ඕනේ වෙලාවට මේ දෙකෙන් එකක් තෝරාගෙන අදාළ මෙතඩ් කෝල් කරලා ඩේටා හැඩල් කරනවා කියල. මේක ගොන්ම උත්තරයක් කියල කියනකොටම තේරුනා. එත් මොනවා කරනනද ගිහින් ඉවරයි. උන් කිව්වේ ඔයා දැන් මෙච්චර හොදට වැඩේ කරන ඇවිත් අයි හදිස්සිය කියල. මම ඉන්ටවිව් එක අතෑරියා . ගොඩින් ජාමේ බේරගන්න තමා බැලුවේ ඊට පස්සේ. පස්සේ මම ටයිම් ඉල්ලුව . එයාල ඔකේ එක දුන්න.
දැන් අපිට ඕනේ අවශ්යතාව අනුව රන් ටයිම් ඔබ්ජෙක්ට් හදාගන්න. මොකද අලුතෙන් ඔබ්ජෙක්ට් හද හද ඉන්න බැ මම උන්දින් කිව්වා විදිහට. මොකද මේ ඩේටා සේව් වෙන තැන් , ඩේටා ඇදලා ගන්න තැන් වලදී මේක හරියන්නේ නැ . හදපු ඔබ්ජෙක්ට් තියෙන්න ඕනේ. මට මතක් උනේ Convert.ToBoolean මෙතඩ් එක. මේකේ මොකද වෙන්නේ? අපි int එකක් දාල bool එකක් ගණන්ව.එක තමා Facory patarn eka. ඔය පැටර්න් එක මම ඕනේ තරම් දාල තියෙනවා. මගුල ඕනේ වෙලාවට ඔලුවට එන්නේ නැ . දැන් හරි නේ මම කිව්වා AutoFactory එකක් හදල ඕනේ විදිහට කන්ස්ට්රක්ටර් එක කෝල් නොකර අදාල RepositoryBase ඔබ්ජෙක්ට් එක හදාගනන්ව. සරලව කිව්වොත් මට sql බේස් එකට දෙයක් සේව් කරන්න ඕනේ උනොත් AutoFactory එකට parameters පාස් කරලා අදාළ RepositoryBase එක අරන් එකේ ඕනේ කරන මෙතඩ් කෝල් කරනවා. ඒ වගේම තමා no-SQL
වැඩේ යන්තම් ගොඩ. එතන හිටපු එකෙක් උගේ ලොකු කම පෙන්නන වෙන්න ඕනේ මේ ප්රශ්නේ තව අදිනවා. මම ඒ වෙලේ මේ මගුල අතැරලා දැම්මා.
උ දැම්මා ප්රශ්නයක්. දැන් රන් ටයිම් එකේ මේ සිස්ටම් දෙක අතර ඩේටා පාස් කරලා සේව් හෝ මොකක් හරි ඩේටා බේස් ට්රාන්සක්ෂන් එකක් කරන්න ඕනේ උනොත් මොකද කරන්නේ කියල. මම කිව්වා මම දන්නේ නැ කියල. පස්සේ කිව්වා ඔයා දැන් ෆැක්ටරි එකෙන් හදන ඔබ්ජෙක්ට් ගැන හිතන්න කියල.
එකට උත්තරේ හරි ලේසි. ඒ වෙලාවේ ඔලුවට එන්නේ නැ බන්. අපි IOC එකට ඉන්ජෙක්ට් කරන කොට ලයිෆ් ටයිම් එක Singleton කරාම ඔබ්ජෙට් එක අවසාන වෙනකන්ම තියනවා. දැන් ප්රශ්නයක් නැනේ. අපි AutoFactory එකෙන් ගන්න object මෙමරි එකේ තියනවා. ඕනේ වෙලවට අරන් පාවිච්චි කරන්න තියෙන්නේ. මගේ උඩ ස්විච් මෙතඩ් එකට ගියා නම් එන්නේ අලුත් ඔබ්ජෙක් එකක්. එක දැනට asp.net Core DI pipe Line එකට ඉන්ජෙක්ට් වෙලා තියන ඉනටෆෙස් එකට අදාළ ඔබ්ජෙක්ට් නෙමේ. එකයි මගේ මුල් එකේ තිබ්බ වරද
මල්ටි සෙශන් අවොත් ඩෙඩ්ලොක් වෙන්න පුළුවන් නේද සින්ගල්ටන් කරාම?උ දැම්මා ප්රශ්නයක්. දැන් රන් ටයිම් එකේ මේ සිස්ටම් දෙක අතර ඩේටා පාස් කරලා සේව් හෝ මොකක් හරි ඩේටා බේස් ට්රාන්සක්ෂන් එකක් කරන්න ඕනේ උනොත් මොකද කරන්නේ කියල. මම කිව්වා මම දන්නේ නැ කියල. පස්සේ කිව්වා ඔයා දැන් ෆැක්ටරි එකෙන් හදන ඔබ්ජෙක්ට් ගැන හිතන්න කියල.
එකට උත්තරේ හරි ලේසි. ඒ වෙලාවේ ඔලුවට එන්නේ නැ බන්. අපි IOC එකට ඉන්ජෙක්ට් කරන කොට ලයිෆ් ටයිම් එක Singleton කරාම ඔබ්ජෙට් එක අවසාන වෙනකන්ම තියනවා. දැන් ප්රශ්නයක් නැනේ. අපි AutoFactory එකෙන් ගන්න object මෙමරි එකේ තියනවා. ඕනේ වෙලවට අරන් පාවිච්චි කරන්න තියෙන්නේ. මගේ උඩ ස්විච් මෙතඩ් එකට ගියා නම් එන්නේ අලුත් ඔබ්ජෙක් එකක්. එක දැනට asp.net Core DI pipe Line එකට ඉන්ජෙක්ට් වෙලා තියන ඉනටෆෙස් එකට අදාළ ඔබ්ජෙක්ට් නෙමේ. එකයි මගේ මුල් එකේ තිබ්බ වරද
await _cosmosDb._container.CreateItemAsync(cosmosUser);honda knowledge ekak awa meken.
Mama demma eke okedi kale NoSql wala connection class eka lazy singleton walin call karanawa startup ekedi. eakedi Container ekak initially hadagannawa singleton widiyata connection eka call karala. a container eka DI waladi ona ona controller athule use karanna puluwan.
me wage
await _cosmosDb._container.CreateItemAsync(cosmosUser);
meke mokakhari awlak thiyanawa neda, mata sure na loku experience ekak me petten na, mama kisima thenaka mewa initial design walata involve wela na mekath kale pet project eke.
සින්ගල්ටන් ඩෙඩ් ලෝක සමනය දෙයක්මල්ටි සෙශන් අවොත් ඩෙඩ්ලොක් වෙන්න පුළුවන් නේද සින්ගල්ටන් කරාම?
උබ කරල තියෙන විදිය හරි. කරන්න ඕනි එකෙ ඔබ්ජෙක්ට් එක සෙශන් එකකට යුනික් කරන එක. ඒකට ඔබ්ජෙක්ට් එක සෙශන් ස්කෝප් එකට දාල ඒකෙන් ගත්ත නන් හරි කියල හිතෙනව.
සෙශන් හැන්ඩ්ලින් නැත්තන් කරන්න ඕනි පූල් එකකින් ගන්න එක කියල හිතෙන්නෙ. Mysql connector එක වැඩ කරන විදියට.
async විදියට යනව නන් ඩෙඩ් ලොක් වෙන්නෙ නෑ. ඒක හරි.await _cosmosDb._container.CreateItemAsync(cosmosUser);
prashne thiyenne methana
Api balanna one simple POCO class ekak wagema complex Object ekakuth save karaganna
othanadi Object map karaganna amaruyi api Pattarn ekak haraha yawwe nathnam. mokada pattarn ekakadi
apita puluwan kelinma Save nokara madadi podi changes karala save ekata yawanna.
Like repository pattern and UOW (Unit of work) pattern. me case eka nam UOW dakkawa yanna one na . but harima widihata liyanawa nam UOW danna one loku process ekakata. wade thiyenne interviw ekak ne ban. api code eka liyanawa nam oka goda daganna puluwan lesiyen
සින්ගල්ටන් ඩෙඩ් ලෝක සමනය දෙයක්
අපි වොරි වෙන්න දෙයක් නැ Async විදිහට Task හරියට ඉම්පිමෙන්ට් කරලා තියේ නම්. ඒ පාට එක මේකේ මම කියන්න ගියේ නැ. මට මතක විදිහට මෙහෙමයි. Task එකකින් දැනට ත්රෙඩ් පුල් එකේ available ත්රෙඩ් එකකට වැඩේ දෙනවනේ. ග්ලෝබල් ස්කෝප් නිසා තනි ඔබ්ජෙක් එකයි. එත් අපි එකේ මෙතඩ් කෝල් කරන්නේ. ඒ මෙතඩ් එක ඈතුලේ මේ ඩේටා බේස් කෝල් යන්නේ. අන්න ඒ මෙතඩ් එක තමා Task එකකින් පුල් එකට දෙන්නේ. අපි Getwaiter.Result ගත්තොත් ඩෙඩ් ලෝක වෙනවා සුවර්. එත් අපි wait කරලා ගත්තොත් ඊට වඩා වෙනස් විදිහක් වෙන්නේ.
wait එකෙන් වෙන්නේ මචන් අපේ ඩේටා බේස් කෝල් එක ත්රෙඩ් පුල් එකේ available ත්රෙඩ් එකකට දෙනවා. එයා වැඩේ වෙන්න දාල ආයි ස්ටේටස් available කරගන්නවා. වැඩේ ඉවර් උනාම කෝල් බැක් එක calling thread එකට අරන් දෙනවා result එකත් එක්ක. මේකෙදි කිසිම ත්රෙඩ් එකක් occupied වෙන්නේ නැ , ඒ නිසා කිසිම ත්රෙඩ් එකක් lock කරගෙන ඉන්නේ නැ .
------ Post added on May 11, 2021 at 2:55 AM
පලවෙනි ප්රශ්නේට උත්තරේ මම දෙන්නම්. මගේ උත්තරේ හරි. එක්පිරියන්ස් එකත් එක්ක දුන්නේ උත්තරේ.
how i Approach
------------------------
මම මගේ පලවෙනි ජොබ් එකේදී ඔය වගේ දෙකට මුණ දුන්නා. තඩි බැන්කින් සිස්ටම් එකක්. ඔඩිට් රිපෝට් එක එන්න යනවා සැහෙන වෙලාවක්. progress 4gl තමා තිබ්බේ. හැබැයි ටයිම් Out එකක් ගියේ නැ . මගේ ඊලග එක උනේ අපි ලොකු ඩේටා ප්රමාණයක් කන්ට්රෝලර් එක ඇතුලට ගණන්ව. අරගෙන PDF එකක් හදලා දෙනක්ටෝට MVC controller එක හිර වෙනවා ඇති කියල. එත් අනිවා Error එකක් පනින්න ඕනේ. මම මුලින් කිව්වේ ඒක . පස්සේ මටම තේරුනා ගොන් උත්තරයක් කියලා
පස්සේ ඉන්ටවිවී කරන එකා ඇහුව ඕපන් මයින්ඩ් එකෙක්න් උත්තර දෙන්න කියල. පස්සේ මට ඔලුවට අවා සින් එක.
අපිට පුළුවන් දවස් ගානේ සේල්ස් රෙපොර්ට් එක හදලා සමරි එකක් වෙනම තැනක ගහලා තියන්න.
එහෙම මාසෙම ගහපු ඒවා අන්තිම දවසේ අර සමරි ටේබල් එකෙන් අරන් දුන්නම ඉවරයි. කෙස් ක්ලෝස් .
මේ අයිඩියා එක අවේ මම අපේ කම්පැනි එකක සර්වර් සයිඩ් එකකට ලොග් සිස්ටම් එකක් හැදුවා. කනෙක්ට් වෙන ඩිවයිස් වලට අදාලව ලොග් වදින්න ඕනේ. සති දෙකයි ලොග් එක හිර වෙනවා. රෙකෝඩ් වැඩි. පස්සේ මම ඩේටා බේස් ශාර්ඩ් කරා ශාඩ් කි එක ඩෙඩ් එක දාල. එකෙන් උනේ දවස ගානේ වෙනම ශාඩ් එකක වදින්නේ එදා දවසේ ලෝග්ස්. පරණ ලොග් බලලා ශාඩ් නොඩ් අයින් කරනවා. මෙන්න මේක මතක තිබ්බ නිසා තම උත්තරේ දුන්නේ
too much workload, the solution is to optimize the time out query1) අපිට පුළුවන් දවස් ගානේ සේල්ස් රෙපොර්ට් එක හදලා සමරි එකක් වෙනම තැනක ගහලා තියන්න
too much workload , the solution is to optimize the time out query
2. we don't like to use load balancers - so how about batch processing
3) backend services need to use both SQL and NO-SQL DataBases. high demand data on No-SQL and low demand and reporting data on SQL. design a strategy to accomplish this task
create a middle tire with using design patterns like abstract factory (this is just a wild guess)