Struts မှာ Databaseကို ဘယ်လို ချိတ်ဆက်မလဲ

Yin Nyine NwayAugust 12, 20101min571

Developer များသောအားဖြင့်က databaseကို ချိတ်ဆက်တယ် access
လုပ်တယ်ဆိုတာကို application ရဲ ့ အဆုံးသက်တစ်ခုလို့ တွေးတောတတ်ကြပါတယ်။
ဒါပေမယ့် database ကို ချိတ်ဆက်ဖို့ access လုပ်ဖို့အတွက်
ချိတ်ဆက်တာမဟုတ်ပါဘူး။ database ကို များပြားတဲ့ စီးပွားဆိုင်ရာ
အချက်အလက် data အသွားအလာ(transaction)တွေအတွက် ချိ်တ်ဆက်ပါတယ်။ ဒါဆိုရင်
Framewrok ရဲ ့ business logic တွေကို ချိတ်ဆက်တာ access
လုပ်တာကနေစပြောရအောင်။ Action ကိုသုံးပါ။

အကောင်းဆုံးကတော့ Action တွေကို web/presentation-tier နဲ့ business
classes ကြားမှာ thin adaptor တစ်ခုအနေနဲ့ သုံးတာပါပဲ။
ဒါ့ကြောင့် ပထမဆုံးက ရိုးရိုး java classes ကို သုံးပြီး business API
တစ်ခုကို ပုံစံဆွဲပါ။ ပြီးတော့ ရိုးရိုးjava type တစ်ခုကို ယူတဲ့ object
ကို သုံးပီး JavaBean ဒါမှမဟုတ် JavaBean အစုတွေကို return ပြန်ယူတဲ့
နည်းက အကောင်းဆုံးပါပဲ။ Action ကအဲဒီ object ကို call ပြီး နောက် ရလာတဲ့
result ကို web/presentation-tier ကို ပေးပြီးပြခိုင်းနိုင်ပါတယ်။
ယေဘူယျ ချဉ်းကပ်နည်းက business transaction တစ်ခုစီအတွက် Action
တစ်ခုစီပြုလုပ်တာပါပဲ။ သာမန် CRUD application တစ်ခုမှာ CreateAction,
RetrieveAction, UpdateAction, DeleteAction ဆိုပြီး ရှိနိုင်ပါတယ်။
Action တစ်ခုစီပြီးမြောက်ဖို့အတွက် Action တွေက လိုအပ်တဲ့ business logic
class တွေကို ခေါ်ယူပါမယ်။
Databaseနဲ့ချိတ်ဆက်တဲ့ access code တွေကbusinessAPIclassesမှာ
encapsulatedဖြစ်နေရပါမယ်။ ဒါမှ Framework ကကိုယ်ဘာကိုသုံးနေတယ်ဆိုတာကို
မသိနိုင်မှာဖြစ်ပါတယ်။ ဒီလိုနဲ့ Framework ကနေ ရှာချင်တဲ့ key
ဒါမှမဟုတ်ရင် string ကို ပေးလိုက်ပြီး bean ဒါမှမဟုတ် collection of
beans ကို ပြန်ယူပါတယ်။ ဒီလို လုပ်ချင်းအားဖြင့် တူညီတဲ့
BusinessAPIclasses ကို အခြားမှာ ပြန်အသုံးချနိုင်ပါတယ်။ ပြီးတော့ web
framework နဲ့ ပတ်သက်စရာမလိုပဲ testing သီးသန့်လုပ်နိုင်ပါတယ်။ သာမန်java
class တစ်ခုလို Test လုပ်ရတာ လွယ်ကူသွားပါလိမ့်မယ်။

DAO pattern ကိုသုံးပါ။
များသောအားဖြင့်သုံးကြတာက DAO(Data Access Object)pattern ကို
သုံးကြပါတယ်။ DAO interface ကို create လုပ်ပြီး Action
ကနေခေါ်သုံးကြပါတယ်။ database access ကို framework ရဲ ့ class တွေကို
မထိပဲ လိုသလို ပြုပြင်သုံးဆွဲနိုင်သွားပါမယ်။
စစချင်းမှာတော့ 1:1 အချိုးနဲ့ use case တစ်ခုအတွက် Action တစ်ခု၊
Business API class တစ်ခု ဆောက်ပြီး သုံးကြည့်ပါ။ အတွေ့အကြုံတွေ ရလာတာနဲ့
Action class တွေကို DispathAction သုံးပြီး ဘယ်လိုပေါင်းလို့ရတယ် ဆိုတဲ့
နည်းလမ်းတွေသိလာမှာပါ။ Action တစ်ခုတည်းကို သုံးပြီး business class
တွေအားလုံးကို ခေါ်သုံးတဲ့ နည်းတွေကိုတောင် သိလာနိုင်ပါတယ်။
Action class တွေကို နည်းနည်းပဲ သုံးနိုင်ဖို့အတွက် Struts နဲ့ MVC
framework တွေက ဘယ်လို အလုပ်လုပ်တယ် ဆိုတာကို နှိုက်နှိုက်ချွတ်ချွတ်သိမှ
အဆင်ပြေပါမယ်။ ဒါ့ကြောင့် ပထမ အစမှာ action class တွေ အများကြီး
ရေးရမှာကို ရှက်ရွံမနေပါနဲ့။ Configuration file ထဲကနေ action class
တွေကို လွယ်လွယ်ကူကူ ထိန်းနိုင်ပါတယ်။

DataSource ကို သုံးပါ။
DAO approach ကို သုံးပြီဆိုရင် database access တွေက business interface
နောက်မှာ ကွယ်ဝှက်နေပါလိမ့်မယ်။ business class တွေက ချိတ်ဆက်မှုတွေကိုပါ
ထိန်းချုပ်ပေးရပါမယ်။
Rule တစ်ခုအနေနဲ့ database ချိတ်ဆက်ဖို့ connection pool ကို သုံးရပါမယ်။
ဒီနေ့ခေတ်မှာတော့ DataSource interface က သုံးသင့်တဲ့နည်းတစ်ခုပါပဲ။
database စနစ်အတော်များများက DataSource ကို support လုပ်ပေးနိုင်ပါတယ်။
DataSource ကို configuration file ထဲကနေ လွယ်လွယ်ကူကူ ဖန်တီးယူလို့ရပါတယ်။

Dynamic Result set ကို သုံးပါ။
Query က result က ActionForm မှာသုံးထားတဲ့ properties တွေနဲ့ map
ဖြစ်နေတတ်လို့ resultset ကိုပဲ ActionForm ရဲ ့ collection
အဖြစ်သုံးနိုင်ပါတယ်။ ဒါပေမယ့် တခါတလေ map မဖြစ်ပဲ ရှိတတ်ပါတယ်။ ဒါဆို
ပြဖို့ အတွက် ဘယ်လို လုပ်မလဲ။
JSP tag တွေက ဘယ်လို bean typeကိုသုံးလဲ ဂရုမစိုက်ပါဘူး။ ResultSet ကို
ဒီအတိုင်း output အနေနဲ့ ထုတ်လိုက်လို့လဲ ရပါတယ်။ ဒါပေမယ့် ResultSet
မှက database နဲ့ ချိတ်ဆက်ထားတာက တွဲကျန်နေပြီး ဒီအတိုင်းကြီး output
ထုတ်လိုက်ရတာက အတော်ကိုပဲ ရှုတ်ထွေးတယ်လို့ ဆိုနိုင်ပါတယ်။ ဒါဆို ဘယ်လို လုပ်ကြမလဲ။
အရိုးဆုံးနည်းကတော့ ResultSetDynaClass ကို သုံးပြီး ResultSet ကနေ
DynaBeans ရဲ ့ ArrayList ကို ပြောင်းဖို့လုပ်ရပါမယ်။ Struts ရဲ ့ Custom
tag တွေက DynaBean properties ကို ရိုးရိုးJavaBean properties တွေလို
လွယ်လွယ်ကူကူ သုံးနိုင်ပါတယ်။

One comment

  • sithuphyo

    August 30, 2010 at 3:05 am

    database ချိတ်ဆက်နည်းအကြောင်းရှင်းပြသွားတာကောင်းပါတယ်။ ဒါပေမယ့်ခုရှင်းပြသွားတာကမပြီသေးသလိုဘဲနော်။ဟီးးဟီး နဲနဲလိုနေသေးလားလို့ဆရာလုပ်တာတော့မဟုတ်ပါဘူးနော်.သားက ဘာမှမသိသေးတော့အမှားပါရင်ခွင့်လွတ်ပေါ့

Leave a Reply