Software Architecture Pattern-Layered Architecture
Software architecture ဆိုတာ software တခုလုံးရဲ. high level structure ကိုဆိုချင်တာ။အလွယ်ပြောရင်ရင် class level, design pattern level လောက်မဟုတ်တော့ပဲ module တွေ component တွေ ဘယ်နေရာမှာ ဘယ်လို functionality တွေ ထားမယ်ဆိုတာမျိုးကို ဆိုချင်တာပေါ့ ။ Pattern ဆိုတာ ခနခန ဖြစ်နေတာတွေ ဥပမာ application တိုင်းမှာ UI, Login, Database Acess, authentication ဒါမျိုး ကိစ္စတွေက ခနခန လုပ်ကိုလုပ်ရတာ။ အဲ့ဒီအခါကျရင် ခုနက ဖြစ်နေတဲ့ problem တွေကို ဖြေရှင်းပေးဖို. proven design solution တွေကို design pattern လို.ခေါ်တယ်။ သူကတော့ architecture pattern ထက်ပို detail ကျတယ်။ Design pattern တွေအကြောင်းသိချင်ရင်တော့ ဒီသွားကြည့်ပါ။
https://www.facebook.com/thet.khine.587/posts/10208694997691875
Software Architecture pattern ဆိုတာ software architecture နဲ.ဆိုင်တဲ့ proven design solution တွေကို ဆိုလိုတာပေါ့။ များသောအားဖြင့် ကြားဖူးနေကျတွေက multi tier architecture, layer architecture, MVC, MVP, MVVM အဲ့လိုကောင်တွေပေါ့ ။ တချို.က MVC လောက်ကို pattern လို.သုံးကြတယ် တကယ်တမ်းက pattern မဟုတ်ဘူး သူ.အထဲမှာ Observer လို pattern လေးတွေကိုပြန်သုံးထားတော့ architecture လို.ပြောရင်ပိုမှန်မယ်။ များသောအားဖြင့် programming framework တွေမှာဆိုရင် ဆိုင်ရာ ဆိုင်ရာ architecture တွေပါပြီးသား။ ဥပမာ Node.js Express, Sail.js, ASP.NET အဲ့လိုကောင်တွေသည် MVC ကိုသုံးတယ်။ Java Strut, Spring framework အဲ့ကောင်တွေသည် MVC ကိုသုံးတယ်။ နောက် framework တွေသည် architecture pattern တခုတည်းမဟုတ်ပဲ တခြားကောင်တွေနဲ. တွဲသုံးတာလဲဖြစ်နိုင်တယ်။ JavaEE application တွေမှာသုံးတဲ့ကောင်ကိုကျတော့ n-tier architecture, layered architecture လို.ခေါ်ကြတယ်။ များသောအားဖြင့် ကိုယ်သုံးမဲ့ framework ပေါ်မူတည်ပြီး အဲ့ဒီ framework နဲ.သင့်တော်တဲ့ architecture ကိုသုံးကြတယ်။ ဥပမာ Android ဆို MVC, MVP,MVVM, Clean Architecture ဒီလိုကောင်တွေသုံးတယ်။
Layered Architecture.
Layered architecture မှာ component တွေကို horizontal layer တွေအနေနဲ.ထားလေ့ရှိတယ်။ Layer တခုချင်းဆီက application ရဲ. ဆိုင်ရာ role တခုခုကိုပဲ လုပ်လေ့ရှိတယ်။ ဥပမာ Presentation layer, business logic layer အဲ့လိုမျိုးပေါ့။ ဥပမာ Presentation layer သည် UI အလုပ် view အလုပ်ကိုပဲလုပ်မယ်ပေါ့။ ကျန်တာမလုပ်ဘူး UI, View နဲ.ဆိုင်တာတွေပဲသူ.ဆီမှာရှိမယ် ကျန်တာတွေအတွက် တခြား layer တွေကိုယူသုံးမယ်။ Layer တခုချင်းမှာ တိကျတဲ့ role, responsibilities ရှိတယ်ဆိုချင်တာ။ အောက်ကပုံမှာ layer architecture ပုံကိုပြထားတယ်။
Layer တခုချင်းသည် အလွှာလိုက်ထပ်ထားတာ. ဆိုချင်တာက presentation layer သည် business layer ကိုလှမ်းသုံးလို.ရမယ်။ ကျော်ပြီး service layer ကို တိုက်ရိုက်သုံးတာမလုပ်ရဘူး။ ဒီလိုပဲ business layer ကလဲ database layer ကိုလှမ်းမသုံးရဘူး ။ အဲ့လို rule တွေ ဖောက်ရင် application ကကြီးလာရင် ဘယ်သူ.ကို ဘယ်နားမှာ ဘာလုပ်လိုက်တယ် မသိဖြစ်ကုန်မယ်။ Layer တခုသည် သူ.အပေါ်က layer, အောက်က layer အဲ့ ၂ခုနဲ.ဆက်သွယ်လို.ရတယ်။ ပိုကောင်းတာက layer တခုချင်းကို loosely couple ဖြစ်အောင်ထားတာ ပိုအဆင်ပြေတယ်။ ဒါဆို သူ.ကို layer တခုချင်းဖြုတ်လိုက်တာ ပြောင်းလိုက်တာရတယ်။ ဥပမာ Database က ပထမ MySQL သုံးထားတယ်ဆိုပါစို. နောက်မှ Mongo DB ပြောင်းသုံးချင်လာတယ်။ ဒါဆိုရင် ပြင်ရမှာသည် Paersistence Layer, Database layer ပဲ ကျန်တဲ့ကောင်တွေ မထိတော့ဘူး။ နောက် presentation layer မှာ ပထမက web ကိုပဲသုံးတယ်. နောက်ကျ Android, iOS ပါသုံးချင်တယ်ဆိုရင် presentation layer လေးကို ထပ်ချဲ.တာဒါမှမဟုတ် ပြောင်းတာလုပ်ရင်အဆင်ပြေပြီ။ layer တခုချင်းကို isolated လုပ်ထားတယ် မဆိုင်တာတွေကို ရောမထားဘူးဆိုရင် layer တခုချင်း test လုပ်ရတာလဲလွယ်တယ်။ ပြင်ရပြုရတာလဲလွယ်တယ်ပေါ့။ Isolated လုပ်ထားတယ်ဆိုတာ ဥပမာ Presentation layer သည် သူ.အောက်က business layer ထဲမှာ detail လုပ်ထားတဲ့ method တွေလောက်ကိုသိစရာမလိုပဲနဲ. သူလိုအပ်တဲ့ public interface method လောက်ကိုပဲသိစရာလိုမယ်။ ဒါမျိုးကိုဆိုလိုတာ။ Layer အလိုက်ရေးထးတော့ code refactoring ကလဲလွယ်တယ်။ တခုနဲ.တခု လုံး၀ tightly coupled ဖြစ်မနေတဲ့အတွက် တခုခုကိုပြင်လိုက်ရင် တခြားတခုကို ထိမှာသိပ်မစိုးရိမ်ရဘူး။
နောက်တခုက layer တွေမှာ ကျော်သုံးချင်ရင် ဥပမာ အပေါ်က service layer ကို open ပေးလိုက်ရင် business layer သည် persistence ကိုတိုက်ရိုက်သုံးလို.ရမယ်။ ဒါပေမဲ့ မဆိုင်ဘဲ layer တွေကို cross လုပ်ပြီးမသုံးတာ အကောင်းဆုံးပဲပေါ့။ Layer architecture မှာမကောင်းတဲ့အချက်က တချို. layer တွေမှာ code တွေ duplicate ဖြစ်နေတာမျိုးပဲ။
Presentation Layer
သူက UI, View တွေအတွက်လုပ်ရတယ်။ ဥပမာ Input လက်ခံတာ data ပြတာ validation လုပ်တာတွေ အကုန်လုံး ဒီ layer မှာပါတယ်။ Java Spring လို framework တွေမှာဆိုရင် Angular, react အစရှိတဲ့ကောင်တေကို Presentation layer အနေနဲ.သုံးလို.၇တယ်။ ဒါမှမဟုတ်သာမာန် JSP, JSF အဲ့ကောင်တွေကိုလဲ presentation layer အနေနဲ.သုံးလို.ရတယ်။
Business Layer
သူကျတော့ business operation တွေနဲ.ဆိုင်တဲ့ layer ပေါ့။ ဥပမာ authentication , access control, domain business logic, စတာတွေပေါ့။ ဥပမာ ecommerce application ဆိုရင် addToCart, တို. payment ဒါတွေလုပ်တဲ့ကောင်တွေပေါ့။
Persistence Layer
သူ.ကျတော့ DAO, ORM တွေသုံးတဲ့ နေရာပေါ့။ Hibernate ,JPA အစရှိတဲ့ကောင်တွေပေါ့ တကယ်က ORM mapping framework တွေကိုဒီနေရာမှာသုံးလို.ရတယ်။ သူက raw database ကိုတိုက်ရိုက်မထိပဲ ORM framework ကိုပဲသုံးတာပိုသင့်တော်တယ်။ ဒါမှနောက် database ပြောင်းရင် ORM ကိုသုံးထားတော့ migrate လုပ်ရတာလွယ်တယ်။
Database Layer
ဒီကောင်ကျတော့ raw database ကိုတိုက်ရိုက် သုံးတဲ့ layer ပေါ့ များသောအားဖြင့် persistence layer လောက်နဲ.တင် အဆင်ပြေရင် မလိုဘူးပေါ့။
Ref Software Architecture Pattern by Mark Richards
Book download link
https://www.oreilly.com/programming/free/files/software-architecture-patterns.pdf


Crd original link=>(https://m.facebook.com/story.php?story_fbid=pfbid031JBdkrGpYcD7oaXhCJCS19XPr5yPDQwZqykD58yFJkwvzhRaP5bCda3sXxafFqdxl&id=1819241055&mibextid=Nif5oz)