ሶፍትዌር

Domain-Driven Design (DDD) እና የሶፍትዌር አስተዳደር ባህሪ – ውስጣዊ አሳባትና መስመር ስራ

  • 20 ለማንበብ ደቂቃዎች
  • የHostragons ቡድን
Domain-Driven Design (DDD) እና የሶፍትዌር አስተዳደር ባህሪ – ውስጣዊ አሳባትና መስመር ስራ

ይህ ብሎግ ማስታወቂያ Domain-Driven Design (DDD) ቀረጻን በሶፍትዌር አሳዳድ አካባቢ በጥልቅ ይወያያል። የDDD ምን እንደሆነ፣ የእሱ አላማዎችንና ከሶፍትዌር አሳዳድ ጋር ያለው ውልን ይማቅረም፤ በተግባር አተገባበሩንም ይጠቀም። በDDD ውስጥ አሳዳድ ያለው ዋና ነጥብ፣ ፕሮጀክቱ የሚጀመርበት ሂደትና በጥልቅ የተገባ ዘዴዎችን እንዲሁም የሚከሰቱ እና የሚገጽበት ችግሮችን በትክክል ይወያያል። የቡድን ስራ አስፈላጊነቱን ሳይለምድ፣ DDDን በተሳካ ሁኔታ ለማስፈጸም ርምጃ የሚወስዱ ምክሮችን ይገናኝ። ይህ አጠቃላይ መምሪያ በDDD የሚሰሩ ተሞክሮ ስራዎችን ለማገናኘት እና ለማስፈጸም የሚፈልጉ ሶፍትዌር አባላት የእጅግ ዋጋ ያለው ምንጭ ነው።

Domain-Driven Design ምንድነው?

Domain-Driven Design (DDD) ከባድና የተወሰኑ የኢልማ ስራዎችን ለማቅረብ እና ከዚህ በተገቢ ሁኔታ የሚሠራ ሶፍትዌር ለማንጸባረቅ የሚያስችለው መንገድ ነው። በመሠረቱ፣ የሶፍትዌር ልማት ሂደቱን በየኢልማው እውቀት ማቅረብ ያደረገው ነው። ይህ አቀራረብ የሶፍትዌሩን ተግባራዊነትና የስራ ዋጋ በማሳደግ የሚፈጠር ተጠናቀቁ የስራ ፍላጎቶችን በማክበር እንጂ በቴክኒክ ዝርዝሮች አይተናገዝም። DDD በተለይም በትልቅና በተዋባይ ፕሮጀክቶች ውስጥ፣ የስራ ጥናት በትክክል እንዲታወቅ እና እንዲቀደስ የሚያግዝ ትልቅ ተጠናቀቁ አሳፋሪ ያለው ዋጋ አለው።

DDD የተመሰረተው በኢስ ቦይን ውስጥ ባለሙያዎችና የሶፍትዌር ልማት ሰራተኞች የቅርብ የእንግዳነት ስራ ባለበት ነው። ይህ ስራ በኢስ ቦይን ቋንቋ (Ubiquitous Language) የሶፍትዌር አዋቀት ላይ የሚገናኝ ያደርጋል። ከዚህ በተነሳ ሁሉም ተሳታፊዎች ተመሳሳይ ግምቶችን በተመሳሳይ መልኩ ያስተዋውቃሉ፤ በውስግ ግና ማንበብና ነገር ላይ ሥርዓተኛነት ይፈጽማል። DDD የሶፍትዌር ልማት ጥያቄ ብቻ ሳይሆን፣ የማሰብ መንገድና የእንግዳነት አሳሳቢ አይደለም።

Domain-Driven Design ምንድነው?
መሰረታዊ ግምት ማብራሪያ አስፈላጊነቱ
Domain (ኢስ ቦይን) የሶፍትዌር ሊያፈታቀው የሚሞከር ችግኝ ስፍራ። የፕሮጀክቱን አስፈላጊነትና ደረጃ ይወስናል።
Ubiquitous Language (በኢስ ቦይን ቋንቋ) በኢስ ቦይን ውስጥ ባለሙያዎችና ልማት ሰራተኞች በቅርብ ስራ የሚጠቀሙት ቋንቋ። የእንግዳነት ስህተቶችን ያቅርበዋል፣ ሥርዓተኛነት ያመጣል።
Entity (ቆይታ) አስደሳች መለያ ያለውና በጊዜ መጠን ሊቀየር ሚችል ነገር። በኢስ ቦይን ውስጥ የመሰረታዊ ግምቶችን ይወክላል።
Value Object (የእሴት ንግግር) መለያ የሌለው፣ በእሴቱ መሠረት የሚታወቅ ነገር። የውስግ ውስጥ የውሃን አንቀሳቃሽነትና ሥርዓተኛነትን ያስተዳደር።

Domain-Driven Design (DDD) ተግባራዊ አካል፣ ኢስ ቦይኑን በጥልቅ ለመረዳትና ይህን ግኝት ወደ ሶፍትዌር አዋቀት ለማዋሀድ ያደረገው ትእዛዝ ነው። ይህ ሂደት ውስጥ፣ የሶፍትዌር ልማት ሰራተኞች በኢስ ቦይን ውስጥ ባለሙያዎች ጋር ሁሉንም ዘመናዊ ግንኙነት ሊያደርጉ ይገባቸዋልና ባለሙያዎቹ ያለውን እውነታ ይዋቀሳቸዋል። DDD የመሳሪያ መቅረፅ ብቻ ሳይሆን፣ በኢስ ቦይን ውስጥ ያለውን የቅርብ አዋቀት በትክክል ለመስተካከል፤ ተደጋጋሚነትና የሚቀየር የሶፍትዌር አዋቀት ለማቅረብ ይረዳል።

    Domain-Driven Design የመሰረተ አካላት

  • Ubiquitous Language: በኢስ ቦይን ውስጥ በተጠቃሚ ቋንቋ አዋቀት ማዘጋጀትና በሁሉም ግንኙነት ውስጥ ይህን ቋንቋ መጠቀም።
  • Domain Model: የኢስ ቦይኑን ቋንቋ አካል መተያየትና ወደ ሶፍትዌር ቀያይም ማዋሀድ።
  • Entities: በኢስ ቦይን ውስጥ በመለያ ልዩ ሁኔታ ያሉ ተሞክሮ መርህ አዘጋጅት።
  • Value Objects: በእሴት ነባሪዎችና መለያ የሌለው አካል መተያየት።
  • Aggregates: የተያያዙ ነገሮችን በአንድ ሀብት ማድረግና የውስግን አንቀሳቃሽነት ያስተዳደር።
  • Repositories: የውሆ ማከማቻና የማግኛ ሰራተኞችን ማዋቀር።

Domain-Driven Design የሶፍትዌር ፕሮጀክቶች የእድል ነጻነትን ለማሳደግ ጽኑ መሣሪያ ነው። ይሁን እንጂ፣ ይህንን ቀደም ብቻ በትክክል ለማዋቀር ሰራተኞች ሁሉ DDD መሠረታዊ ህጎችን ያስተዋውቁና ያውጉ ይገባቸዋል። ስህተት ሲፈጠር፣ DDD ፕሮጀክቱን ከአጋጠማ በላይ ያደርጋልና ተጠቃሚዎቹን ምክንያቶች የሚገኛ አይደለም። ስለዚህ፣ DDD መቀነትና መንገዱ ምን በትክክል እንደሚያስፈልገው አስተዋውቀው ወስኔ ይወስኑ።

Domain-Driven Design’ የሚሰጠው አግዳጅነት

Domain-Driven Design (DDD) በውስጣዊ የኢሳቅ እና የችግኝ ተግባራትን ማስረዳትና እነዚህን በሶፍትዌር ዕቅድ ላይ ማድረግ የታተመ አካሄድ ነው። ይህንን አካሄድ መዝወር ለሶፍትዌር ፕሮጀክቶች በጣም የሚመከተሉ ጥቅሞችን ይሰጣል። DDD በውስጣዊውን የንግድ ቦታ በጥልቅ ማስረዳትን እና ለተቀባይ ሶፍትዌር እንዲያገኙ ተጠናቀቆ ይረዳል። ይህም ለተጠቃሚ የተስፋፋ እና የሚበዓበዓ መተግበሪያዎችን ይዘው የሚቀርቡ እንዲያደርጉ መንገድ ይዘረጋል።

DDD’ በግልጽ የሚያወቀው አግዳጅነቱ አንዱ በንግድ እና በቴክኒክ ቡድኖች መካከል ያላቸውን ግናኝነትን ማታቀል ነው። በአጋላጭ ቋንቋ (Ubiquitous Language) ችግኝነት ተጠቃሚዎች እና ሶፍትዌር አንቀሳቃሾች በአንደኛው ግስ ላይ የሚገኙ ናቸው እና በረዳትነት የሚስማማ ግናኝነት ይሰጣል። ይህም በመመኘት ትክክለኛ መረዳት እና በቅድሚያ የእሴቶችን ህላዊ ማቅረብን ያካሄዳል። በዚህም፣ በፕሮጀክት ሂደት ውስጥ የሚፈጠሩ ስህተቶች እና የጊዜ መቆሰለቶች ይቀናሉ።

Domain-Driven Design የሚሰጠው አግዳጅነት
አግዳጅነት ማብራሪያ ተፅዕኖ
የንግድና የቴክኒክ ማስተካከያ የንግድ ቦታ በብዙ ማስረዳትና በሶፍትዌር ላይ መንገድ የሚደረግ። የትክክለኛ ጥያቄዎችን መረዳትና መተግበር።
የግናኝነት ቀላልነት አንደኛ ቋንቋ (Ubiquitous Language) የተጠቀመ። የትዕቢት የሚያደርጉ ድህነት፣ የተጠቃሚ ባህሪያትን የሚያሳያል።
እድል የሚቀጥላ በሞጁላርና በታጣቂ ዕቅድ። በንግድ ቦታ መቀየር በቀላሉ መቀበል።
ከፍተኛ ጥራት የንግድ ሕጎችን የሚከተለ እና ሊሞክር የሚችል ኮድ። የበቀላይ ስህተቶች፣ በታመነ መተግበሪያዎች።

ከዚህ በላይ፣ DDD የሶፍትዌር የቀጣይነትን (እድል የሚቀጥልነት) እና የሚገኙ መብትነት ይጨምራል። DDD መሰረቶች መሠረት ተዘውትዞ የተሰራ መተግበሪያ፣ በሞጁላርና በገለፃዊ ክፍሎች የተቀደሙ ነው። ይህም የመተግበሪያውን በበዓበዓ አካል ከዋናው ያልተያዙን በፍጥነት ማዳስ እና ማሻሻያን የሚቀርበውን ያሳያል። ስለዚህ የተቀየሩ የንግድ መጠይቆችን በፍጥነት ማዋለድና የመተግበሪያውን እድል የሚቀጥልነትን ለማሳደግ ይሻላል።

    Domain-Driven Design’ የሚሰጠው ጥቅም

  • ከንግድ ጥያቄዎች ጋር የተስማማ የሶፍትዌር ማዋል
  • በንግድና በቴክኒክ ቡድን የተጣራ ግናኝነት
  • ከፍተኛ ጥራት እና ከሻሻሉ ተሞክሮው ኮድ
  • የመተግበሪያው እድል የሚቀጥልነት ምስክር
  • ሞጁላርና የሚገኝ በልዩ ዕቅድ
  • የፍጥነት ገብረታዊነት ምስክር

DDD የሶፍትዌር ጥራቱን ያሳድራል። የንግድ ህጎችን በግልጽነት እና በብልህነት ማቅረብ ኮድን የሚታወቀና የሚበዓበዓ ያደርጋል። ይህም፣ ስህተቶችን በቀድሞ ማግኘትና ማስተካከል ያሳልፋል። DDD ተጠቃሚዎች የመተግበሪያዎች በትክክል ይሰራሉ እና የተቻለ አሳማኝነትን ያደርጋል።

የሶፍትዌር አርእስት እና Domain-Driven Design ግንኙነት

የሶፍትዌር አርእስት ሰርአዊ አካላቶች እና ከነዚህ አካላቶች መካከላዊ ግንኙነቶች ሲሆኑ እንዲሁም ሲስተሙን የሚያበረታቱ መሠረታዊ መህደራትን ይግለጽ። Domain-Driven Design (DDD) ደግሞ ስለሚያገኙ የንግድ ችግሮችን በሶፍትዌር ልማት ሂደት ውስጥ በንግድ ዘርፍ ታሪክ መሠረት መቆጣጠርን እና በየንግድ ዘርፉ ስም በሶፍትዌር ማዋቀር ላይ እንዲታመን የሚያመነው አቅጣጫ ነው። ከነዚህ ሁለት ግንኙነት የሶፍትዌር ፕሮጀኮች ስኬት ላይ ግልጽ የሆነ ተጽናና አለው። DDD የሶፍትዌር አርእስት ከንግድ መጠየቂያዎች ጋር እንዲዛመን ያደርገዋል እንዲሁም በሚቀጥለው የሚቀርበው ለማስተዳደር ቀላል እና ለቃል የሆነ ስርዓት ይመርጥ ይሆናል።

የሶፍትዌር አርእስት አይነቶች

  • በንብረት የተደረገ አርእስት (Layered Architecture)
  • ሚክሮሰርቪስ አርእስት (Microservices Architecture)
  • በክስተት የተነሳ አርእስት (Event-Driven Architecture)
  • በአገልግሎት ታድሶ አርእስት (Service-Oriented Architecture – SOA)
  • አንድ አሰራር አርእስት (Monolithic Architecture)

DDD’ የመሠረታዊ አላማው የንግድ ዘርፉ ውሳኔና ችግር በሶፍትዌር እውቅና እንዲታወቅ ነው። ይህ የንግድ ዘርፉ ገዳዮችን እና ፍትሃን በትክክል በኮድ ውስጥ እንዲውሉ ማለት ነው። የሶፍትዌር አርእስት በዚህ አርእስት ውስጥ የሚፈልጎ ግብ ለማድረግ የሚሟሟ መመኪያ ይሆናል። ለምሳሌ በንብረት አርእስት የተጠቀሙ ከንግድ ዘርፉ የማኅበረሰብ አዳራሽ በብቻ አካባቢ ሊገናውጥ ይችላል የዚህም አዳራሽ የንግድ ዘርፉ ቋንቋን ይወስዳል የሚገናኙ ክፍሎችና ነገሮችም ሊያስከትሉ ይችላሉ። በሚክሮሰርቪስ አርእስት የተወሰነ አንድ ሚክሮሰርቪስ የንግድ ዘርፉ አቅምን ሊደረግበት ይችላል፣ በብቻው ውስጥ DDD መሠረታዊ መህደራት በትክክል ይታከማል።

የሶፍትዌር አርእስት እና Domain-Driven Design ግንኙነት
ባህሪ የሶፍትዌር አርእስት Domain-Driven Design
ዓላማ የሲስተሙ ሠርአዊ ውቅብ እንዲቀርበው ማድረግ በንግድ ዘርፉ ላይ ሚመሰረት ችግሮችን መቆጣጠር
የትንቱ ነጥብ ታኒኛ የሲስተሙ መጠየቂያዎች፣ ውጤት፣ ሚዛንነት የንግድ መጠየቂያዎች፣ የንግድ ሂደቶች፣ የንግድ ዘርፉ ቋንቋ
አስተዋፅኦ የሲስተሙ ሠርአዊ ውቅብና የመዋቀር ቀላልነትን ያሳካል በንግድ ዘርፉ ዜና፣ የሚታወቅና የሚቀጥል ኮድን ይዘው ይሰጣል
ግንኙነት DDD እንዲፈፀም የሚዘናጋ የመመኪያ መስፈርትን ይሰጣል የሶፍትዌር አርእስት በንግድ መጠየቂያዎች እንዲዛመን ያደርጋል

DDD’ን በሶፍትዌር አርእስት የሚያድርጉ ለፕሮጀኮች በግልጽ ምንጭ የሆኑ ስኬታማና የሚቀጥሉ የሆኑ ፕሮጀኮች ማህበረሰብ ይችላሉ። ጥሩ የሶፍትዌር አርእስት DDD መሠረታዊ መህደራትን ለማድረግ የሚያሳረድ ምላሽና አካባቢ ይቆማል። በዚህም ጊዜ የንግድ መጠየቂያዎች በሚለዋዋጡ አቅም በታናሽና ቀልጣፋ አካባቢ ለማግኘት ይችላል። እንዲሁም በንግድ ዘርፉ ቋንቋ ተደርጎ የተሳሰበ ሶፍትዌር በንግድ ፓርተኮችና በልማት ቡድን መካከል የግንኙነትን ስርአት ያሳድጋል እና ስህተቶችን ይከላከላል።

የሶፍትዌር አርእስት እና Domain-Driven Design አንዳንድ ልዩ ነገሮች የሚያገኙበት እና የሚያበረታቱ ሁለት አስፈላጊ ግንኙነቶች ናቸው። የሶፍትዌር አርእስት DDD እንዲተገበር ዝቅተኛ አካባቢ ይሰጣል፣ DDD ደግሞ የሶፍትዌር አርእስት በንግድ መጠየቂያዎች ላይ እንዲዛመን ያደርጋል። በዚህ መንገድ የሚታከሙ ሶፍትዌር ፕሮጀኮች ለምሳሌ ስኬታማ፣ የተቀጠለና የንግድ እና የምህጭ እሴት የሚበረታባቸው ፕሮጀኮች የሚሰሩበት ይችላሉ።

የ Domain-Driven Design አፕሊኬሽኖች

Domain-Driven Design (DDD) ለችግሮች ከባድና የክስተት የኢሽ ችግሮችን ለመፍታት ታላቅ አቅም ያለው አተረጓሚ ነው እና ተለመድ በሶፍትዌር ፕሮጀክቶች ውስጥ ይጠቀማል። DDD ’ን በትክክልና በስኬት ለመተግበር የሚያስፈልጉት ውስጣዊ የስራ መረጃና ትክክለኛ የስራ ስርዓቶችን መምረጥ ነው። በዚህ ክፍል፣ DDD’ን በእውነቱ ለማስተጋበር ታሪክ እና የተሳካ ፕሮጀክት ተሞክሮዎች ይዘው ይየካሉ። በግልጽ ደረጃ፣ ስትራቴጅክ ዲዛይን እና ታክቲክ ዲዛይን ክፍሎችን እንዴት ከተለያዩ የስራ ስርዓት ዋና አካላት ጋር አካትተን እንደሚሰሩ የተደነገው ነው።

DDD ፕሮጀክቶች ውስጥ የሚገኙ ዋና ችግሮች

የ Domain-Driven Design አፕሊኬሽኖች
ችግር መግለጫ የሰራሽ ፡፡ እናቀርባ
የትምህርት ቦታን መረዳት ከቦታ ባለሞያዎች ትክክለኛና የተደረገ መረጃ ማሰብ። ቀጣይ እና ብዙ የሚያደርጉ ግና መነጋገር፣ ፕሮቶታይፕ ትምህርት፣ ቋንቋ በጋራ አቀራረት።
Ubiquitous Language መስራት ተሳታፊዎች እና ቦታ ባለሞያዎች መካከል የበጋራ ቋንቋ ማቋቋም። ቃላት ዝርዝርን ማዘጋጀት፣ ቀጣይ ስብሰባ ማድረግ።
Bounded Context’ን መታወቅ የሞዴሉ በተለያዩ ክፍሎች የግብር ስፍራን መለየት። Context Map ማዘጋጀት፣ ሴኒያሮ ትንታኔዎችን ማድረግ።
አግሬገትን መያዝ የውስጥ ሴክን የታሰረ እና የፍታተኛ ስርዓትን መስቀል። አግሬገት ምንጮቹን በጥንቃቄ ማምረጥ፣ የግብር ስፍራን መግለጥ።

DDD’ህ በተግባት ሲተግበር፣ የቦታ ሞዴልን ትክክለኛ ለማዘጋጀት አስፈላጊ አካል ነው። የቦታ ሞዴል የኢሽ ፍላጎቶችንና ፍላጎት ሂደቶቻቸውን የሚያዘው አጭር ነው፣ በፍፃማ ሁኔታ እና ቦታ ባለሞያዎች በመጋረጡ ላይ የተትክክለኛ ዓይነቱ መረዳት ይኖረዋል። ሞዴሉን ማዘጋጀት ላይ፣ ubiquitous language (በቦታ ላይ ከፍተኛ የቋንቋ ተግባር) የተቃራኒ ያለበትና ዋናው አካል ነው። Ubiquitous language ተሳታፊዎች ሁሉ በተስተናጋጅ ቃላትና ክፍሎች መነጋገር ያሳካል።

    የ Domain-Driven Design አፕሊኬሽን ደረጃዎች

  1. ቦታ ባለሞያዎች ጋር በጥልቀት የተዋዋይ መታየትን ማድረግና የኢሽ ፍላጎቶችን መረዳት።
  2. Ubiquitous Language ማቋቋምና ቃላት ማስተከል ዝርዝርን ማዘጋጀት።
  3. Bounded Context’ን መፍጠርና Context Map ማሳየት።
  4. አግሬገትን ዲዛይን ማድረግና የውስጥ መጠን ማስተካከል።
  5. የቦታ ሞዴልን አስተዳደርና ዘወትር ማሻሻያውን ማድረግ።
  6. የ ተሞላ ግልጽ ጥያቄ (TDD) ውስጥ በተቃራኒ አቅራቢዎቹን ጌጥ አውጅ።

ከዚህ በተጨማሪ፣ በ DDD ፕሮጀክት ውስጥ የቀጣዩ እና ማዘጋጀት የመጋራት ስርዓት የተደረገ ነው እና ሞዴል ዘወትር የሚያሻሻይ ነው። በስራ በሚገኝበት ፕሮስስ፣ በፕሮቶታይፕና ሞዴል መስራት በሚዘጋጀበት የቦታ ሞዴል ትክክልና ውስጥ የተደጋጋሚ ሙከስ ይሰራል። የትክክል አላማዎችና ስህተቶች በቀደም ማየት፣ የፕሮጀክት ስምንት ለማጣት ሊያጋሩ ይችላል።

አግባብ ተተገበሩ የማተረጓሚ ምሳሌዎች

የ DDD አግባብ የአፕሊኬሽን ምሳሌዎች በተደጋጋሚ በከባድ፣ የችግር ሂደቶችን የሚያድርጉና በአግባብ የሚጠሩ ፕሮጀክቶች ውስጥ ይታያሉ። ለምሳሌ፣ ትልቅ የማግድ መድረክ የትእዛዝ አስተዳደር፣ የቋሚ እንቅስቃሴና የደንበኞች ግንኙነት እንደሚተገኙ በተለያዩ bounded context’ የሚኖሩ ይችላሉ። እያንዳንዱ bounded context የራሱ የቦታ ሞዴልና የተለያዩ ስርዓት ይኖርበታል እና በተለያዩ የአካባቢ ቡድኖች አድርጎ ይቆጣጠራል።

የተሳካ ፕሮጀክቶች

ሌላ የተሳካ የ DDD ፕሮጀክት ምሳሌ ከባድ የፋይናንስ ውስጥ የሚደረጉ መድረክ ነው። ይህን ያህል የመድረክ በየመሣሰሉት የፋናንስ ምርቶች፣ የአደጋ አስተዳደርና የውጅ ደረጃዎች በተለያዩ bounded context’ ይገኛሉ። DDD ይህን ከባድነትን ለመቀነስና የመድረክ ተቀባይነትና በትዕዛዝ ለማሳሰብ ትክክለኛ ዘዴ ነው።

Domain-Driven Design ሶፍትዌር ብቻ የማተረጓሚ ተውላጅ አባላት አይደለም፣ እንዲሁም የአስተዳደርና አውድ ሞዋደስ ነው። የቦታ ዕውቀትን በመሠረት ለዛምና አገልግሎቱ የተሟሟ ሶፍትዌር ማስተዳደር ይችላሉ። – Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software

Domain-Driven Design ላይ አስፈላጊ አካላት

Domain-Driven Design (DDD) በውስጥ ግጥም ያለ የሶፍትዌር ፕሮጀክቶች ውስጥ የኢትዮጵያ ውስጥ ፍላጎትና መረጃን ማዕከላዊነት ያደርጋል፤ በሙዚቃ መከናወን የሚያስችል የቅርፀ መስክ አማራጭ ይሰጣል። በሆነ ግን፣ DDD በትክክል እንዲሰራ ለማድረግ የሚከተለውን አስፈላጊ አካላት ማስተናገድ ያስፈልጋል። እነዚህ አካላት በትክክል የሚታወቁና የሚደርሱ መሆናቸው ለፕሮጀክቱ ሳይቀር በጣም አስፈላጊ ነው። ከሆነ አቅም የDDD ጥቅሞቹን ማግኘት እንደማይቻል ወደኋላ ሊሆን ይችላልና፣ ፕሮጀክቱም ዝቅተኛ የውጭ ግጥም ትርታ ሊያገናኝ ይችላል።

DDD በትክክል የሚተገበም ለማድረግ የመስክ ንድፍ ትንበያ ይፈልጋል። የኢንዱስትሪው የዋና የንግድ ሂደቶች፣ ትምህርት አኗኗርና ደንቦቹ የሶፍትዌሩን የቅርፀ መስክ መሠረት ሊሆኑ ይገባል። ይህም የሶፍትዌር አንዳንድ ባለሙያዎች ጋር በቅርብ ግንኙነት መስራትና የተደጋጋ ቋንቋ ማቅረብ ይፈልጋል። የተሳሳተ ወይም የታጠፈ የመስክ መረጃ ወደ የተሳሳተና የታጠፈ አቅም እና ወደ አስተዳደር የማይከናወን ስራዎች ሊወስድ ይችላል።

    አስፈላጊ አካላት

  • በመስክ ባለሙያዎች ጋር ቅርብ መተባበር፡ ዘወትርና ቅርብ እንዲደርስ የሚችሉ መገናኛዎች።
  • የተደጋጋ ቋንቋ (Ubiquitous Language): በአጋማሽ ሁሉ ተሳታፊ ተሞክሮዎች የሚያውለውን ተደጋጋ ቋንቋ መጠቀም።
  • የተወሰኑ ተያያዥ አካባቢዎች (Bounded Contexts): መስኩን ወደ ትንንሽ ንድፍ የተከፋፈለ ቅርፀ መስክ፣ እያንዳንዳቸውም የራሳቸው ሞዴል እንዲኖራቸው።
  • የመስክ ሞዴል፡ የንግድ ደንቦችንና ፍቅርን የሚያውሉ የኔስ ሞዴል።
  • የስትራቴጂክ DDD: የተወሰኑ መስኮች በጣም አስፈላጊ ነው የሚሆናቸውን መወሰን።
  • የታክቲክስ DDD: የንግድ አካንድ፣ የዋጋ ኔስ እና አገልግሎቶች የሚሆኑ የመስክ መሠረት ማጠቀም።

በታች የቀጠለው ሰንጠረዥ የDDD አስፈላጊ አካላት የተሳሳበ ትንሣኔን እና ትምክትን ያቀርባል። እነዚህ አካላት በDDD የቅርፀ መስክን በትክክል ለማድረግ የመከናወን መመሪያ ናቸው። አንዱን አካላት በፕሮጀክቱ ልዩ አዳዲስ ፍላጎትና አካባቢ የሚስተካከል።

Domain-Driven Design ላይ አስፈላጊ አካላት
አካል ማብራሪያ አስፈላጊነት
በመስክ ባለሙያዎች ጋር ተባባሪነት የሶፍትዌር ሰሪዎችና የመስክ ባለሙያዎች አካልን በሃሳብ ለማድረግ በቅርብ ግንኙነት መስራት ትክክለኛና ሙሉ የመስክ መረጃ ያደርጋል
የተደጋጋ ቋንቋ (Ubiquitous Language) በፕሮጀክቱ ውስጥ ሁሉም ባለቤቶች አካል በአንደኛ ቋንቋ ማቆለል ውይይቶችና ትንሽ የሚሰሩ ተሳሳትን ያቆም
የተወሰኑ ተያያዥ አካባቢዎች (Bounded Contexts) ትልቅ መስክን ወደ ትንንሽ ቀጥ የተበደለ ቅርፀ መስክ ማቅረብ ግጥምን ያቆምና አካባቢዎቹ እያንዳንዳቸው የራሳቸው ሞዴል ያስችላቸው
የመስክ ሞዴል የንግድ ደንቦችንና ፍቅርን የሚያውሉ የኔስ ሞዴል ሶፍትዌሩ የንግድ ፍላጎቶችን በትክክል ይሰጣል

DDD ዘወትር ማዕከላዊ ማስተላለፊያና መቀየር ሂደት ነው እንደሆነ ማስታወስ ይገባችኋል። ፕሮጀክቱ እየዳሰሰ፣ የመስክ መረጃ ጥልቅ ይሆናልና ሞዴሉን ዘወትር ማዘመን ይፈልጋል። ይህም ታነቀቀ የቅርፀ መስክ አማራጭና ዘወትር የግብረ ነጥቢያ ሰንበት መዘወብ ሊያደርግ ይገባል። የተሟላ DDD አመራር ለቴክኒክ ችሎታዎች የቆረቆረ ሳይሆን፣ ግንኙነት፣ ተባባሪነትና ዘወትር ማስተላለፊያ ችሎታም አማካይ ነው።

Domain-Driven Design ብቻ መሳሪያ ወይም ቴክኒክ ሳይሆን፣ ሃሳብ መንገድ ነው። የንግድ ችግኝነቶችን ማወቅ፣ ባለሙያዎች ጋር መግናኘትና የሶፍትዌሩን ቅርፀ መስክ በዚህ ሃሳብ ላይ ማንጠብጠብ DDD የመንፈሱ ነው።

Domain-Driven Design የፕሮጀን መጀመሪያ ማድረግ

Domain-Driven Design İle Proje Başlatma

Domain-Driven Design (DDD) የፕሮጀን መጀመሪያ ማድረግ በልሳናዊ አቀፍ እንደ ሆነ የተለመዱ አቅራቢያዎች ምንም እንኳን የተለየ ያደርገዋል፤ ይህም የተጠቃሚውን የኢሽ ሃሰት ቋንቋና መሰረት መረዳትና መተዳደር በጣም ደስታ አድርጎ የሚቸል። ይህ ሂደት ለፕሮጀኑ አሳፋሪ አስፈላጊ ነው እና በሶፍትዌር ልምዶች የመጀመሪያ ምድቦች ውስጥ ትክክለኛ ውሳኔዎች ይሰጣሉ። በፕሮጀን መጀመሪያ ምድብ ውስጥ ከኢሽ ተወዳድሮች ጋር በፍትፍት እና በቀልቀል ባህላዊ መስራት እና ትክክለኛ ማስፈራረት በጣም አስፈላጊ ነው።

Domain-Driven Design የፕሮጀን መጀመሪያ ማድረግ
ደረጃ መግለጫ ውጤቶች
የኢሽ ርዕስ ትንተና የኢሽ ርዕስ በጥልቅ መትንተና፣ ከተጠቃሚዎች ቋንቋ ማግኘት። ከኢሽ ባለሙያዎች ጋር የተደረገ ውይይት ፅሁፎች፣ የቋንቋ መዝገብ።
የቅድሚ እስቲ ሜዳ ካርታ በተለያዩ ንዑስ እርከናቶች ፣ ውክልና በሚታየው ቅርጸ ምስል ማቅረብ። የእስቲ ሜዳ ካርታ ዲያግራም።
የጥናት እርከና ማዕከል መለያየት ሶስተኛው የኢሽ ርዕስ ፣ የኢሽ አስተዳደር ጥቅም ያለውና የተወሰነ የውድድር ዝግጅት ሚበረታቹ የሚፈጥሩትን መለያየት። የጥናት እርከና አጠራረብና ወሰኖች።
በማትክክል ቋንቋ አማካይነት መልእክት ማድረግ በኢሽ እና ቴክኒክ ቡድኖች መካከል የትክክለኛ ቋንቋ ማሳያ። የቋንቋ መዝገብና ምሳሌ ሴነሪዖዎች።

በፕሮጀን መጀመሪያ ምድብ ውስጥ ፣ በመጀመሪያው የኢሽ ርዕስን በጥልቅ መትንተና ማድረግ ያስፈልጋል። ይህ ትንተና በኢሽ ባለሙያዎች ውይይቶች፣ የሰነድ ጥረታዎችና በሚገኙ ሲስተሞች ላይ መትንተና ያቀርባል። ዓላማው፣ የኢሽ ርዕሱን መሰረታዊ መረጃዎች፣ ሂደቶችና ህጎች ማስረዳት ነው። በዚህ አውድ የታገኑ መረጃዎች፣ በፕሮጀኑ አሚቀቅ ምድቦች ላይ ልክ የመተላለፊያ ፋይል እንደሚቆም ይሆናሉ።

    የፕሮጀን መጀመሪያ ደረጃዎች

  1. በኢሽ ባለሙያዎች ውይይት የሚደረግና የማዕከል መከላከል
  2. የሚገኙ ሲስተሞችና ሰነዶች ትንተና ማድረግ
  3. የእስቲ ሜዳ ካርታ ማብራሪያ ማድረግ
  4. በተለያዩ ቋንቋዎች (Ubiquitous Language) መፍጠር
  5. የጥናት እርከና አድራጎትና ማስተካከያ ማድረግ
  6. Domain Model’ን የመጀመሪያ መሰረታዊ እትም መፍጠር

DDD የፕሮጀን መጀመሪያ ተግባሩ በጣም አስፈላጊ ደረጃ ከሆነው Ubiquitous Language ይህም በኢሽና በቴክኒክ ቡድኖች ተመሳሳይ ቋንቋ በተመሳሳይ ሓሳብ ማድረግ እንዲከተል ያደርጋል። በቋንቋ ተቀናቃኝነት የፕሮጀኑን ሞዴል መፍጠር ለፕሮጀኑ የተለያዩ መድረኮችን የሚያሳይ፤ የሶፍትዌሩ ስራ አስተዋይነትና አቀፍነት እንዲደርስ ያደርጋል።

በፕሮጀን መጀመሪያ ደረጃ ፣ Domain Model’ን የመጀመሪያ እትም መፍጠር አስፈላጊ ነው። ይህ ሙደል የኢሽ ርዕስ መሰረታዊ መረጃዎችንና መዋቅሮችን የሚያሳይ ቀላል ሞዴል ሊሆን ይችላል። ሞዴሉ በፕሮጀኑ የሚቀጥሉ ደረጃዎች ውስጥ ጥልቅ በጥልቅ ይተስፉ፣ ይበረታ። ይህ ሂደት በተደጋጋሚ ምርመራና በግምት ፋና የሚቀጥል ነው።

Domain-Driven Design ማዕከላዊ አድማጮች ስለሚተገበሩት ምርጥ ልምዶች

Domain-Driven Design (DDD) እየተተገበረ ከሆነ፣ የፕሮጀክቱን ስኬት ለማሳደግ በተወሰኑ ምርጥ ልምዶች ላይ በደኅና መታየት አስፈላጊ ነው። እነዚህ ልምዶች የሶፍትዌር ልማት ሂደቱን ከፍተኛ ውጤት አድርገዋል፣ የኮድ ጥራትን ያሳድጋል እና የቢዝነስ ፍላጎቶችን በትክክል ማስተካከልን ያስችላል። የDDD መሰረታዊ መስፈርቶችን መረዳት እና በትክክል መተግበር በውስጣዊ አሰባሰብ ላይ ጥሩ ሚና ይተዋዋል፤ በፕሮጀክቶች ጥርጥርን ለማስተካከልና ለቆይታ ርዕው ሊያደርግ ይችላል።

በDDD ፕሮጀክቶች ውስጥ፣ የUbiquitous Language (ሁሉቦታ የሚገኝ ቋንቋ) ማቅረብ ታላቅ አስፈላጊነት አለው። ይህ ተማሪዎች እና የDomain ባለባለይዎች መካከል ጋር ለመልካስ ምሳሌ የተደረገ ቋንቋ ማቅረብ ነው። በዚህ መንገድ፣ በግንዛቤ የሚከሰቱ አዘናጋች፣ የቢዝነስ ፍላጎትና የቴክኒክ ፍቅር መካከል ያለው መገናኛ ማቋረጥ ይታነከላል። የወደፊት ቋንቋ ትልቅ ትህትና ናቸው፣ አስተዳደር በትክክል ማስተካከል ይተዋዋልና ኮድ የቢዝነስ ስፍራን ለማከት ይረዳል።

Domain-Driven Design ማዕከላዊ አድማጮች ስለሚተገበሩት ምርጥ ልምዶች
ልምድ ምስክር ጥቅሞች
Ubiquitous Language ተማሪዎችና የDomain ባለሙያዎች መካከል ጋር በህብረት የተደረገ ቋንቋ ማቅረብ። የመገናኛ መቋረጥን ያፀድቃል፣ ፍላጎትን በትክክል ማስተካከል ይችላል።
Bounded Contexts Domainን ወደ ትንሽ፣ አስተዳደር የሚችሉ ክፍሎች መከፋፈል። ጥርጥሩን ያቀናል፣ ካንቱ አንዱ በስተትክክል እንዲለምን ይችላል።
Aggregate Root ተያያዥ ንብረቶች የተቀበሉትን ተዋናዎች ወደማቅረብ። የውስጠ ታክትናን ይጠብቃል፣ የውስጠ አቀርባች አሰራሮችን ይቀላቀላል።
Domain Events በDomain ውስጥ የሚከሰቱ ተወዳጅ ክስፍሎችን ወደማቅረብ። መካከለኛ ስርዓት ግንኙነትን ይቀላቀላል፣ ለለዋዋጭነት ፈጣን ምላሽ ይሰጣል።

Bounded Contexts (የተውጣጣህ እስከ ተደረገ አካባቢ) መጠቀም፣ ጥርጥሩን ለመቀነስ አስፈላጊ ቴክኒክ ነው። የሰፊና የተወላጅ የDomainን ወደ ትንሽ፣ ቀላል የሚቆጣጠሩ ክፍሎች ይቆርጥ፤ ካንቱ አንዱ የራሱን ሞዴልና ቋንቋ ይይዛል። ይህም የአካባቡ ውስጥ ትክክለኛና የሚታወቀውን ይያዛል እና አካባቦች መካከል ግንኙነት በግልጽ ይተዋዋል።

ምርጥ ልምድ ምክር

  • Ubiquitous Language በመፍጠር፣ ተማሪዎችና የDomain ባለሙያዎች መካከል ነጻነትን አብቅቱ።
  • Bounded Contexts በመጠቀም፣ Domainን ወደ ትንሽና አስተዳደር የሚቆጣጠሩ ክፍሎች አኗኗሩ።
  • Aggregate Rootን በትክክል በመስየት፣ የውስጠ ታክትናን ይጠብቁ።
  • Domain Events በመጠቀም፣ ጉዳዮችን የሚታወቀውን አካባቢ የስርዓቱን ክስፍሎች ይቅርቡና ተደራሽነት አውጡ።
  • Repository Pattern በመጠቀም፣ የውስጠ አግኝቶችን በስርዓት አድርጉና ተፈጥሮን ያዳጉ።
  • Command Query Responsibility Segregation (CQRS) መስፈርት በመጠቀም፣ የእይታና የጽፍት ድርድርን አግኝቶችን ተኗኗሩና አውጡ።

Aggregate Roots (የጥቅም አያያዥ ስፍራዎች) የሚታወቁትን ማንኛውንም ፍላጎት ለማስተካከል አስፈላጊ ናቸው። አንድ የጥቅም አያያዥ ምሳሌ፣ ተያያዥ ንብረቶችን አቅርቦ የውስጠ ታክትናን ይጠብቃል። አንድ ጥቅም አያያዥን በመጠቀም፣ ከሌሎች ንብረቶች ጋር የሚገኙት ተያያዥነት ይይዛል። ይህ ውስስትን አቅርቦ የውስጠ አቅርባች አሰራሮችን ይበትናል፣ የውስጠ ታክትናንም ይጠብቃል። እንዲሁም፣ Domain Events (የDomain ክስፍሎች) በመጠቀም፣ በDomain ውስጥ የሚከሰቱ አሰባሰብ ክስፍሎችን መልካም በማድረግ ሊጠቀሙት ይችላሉ እና ምላሽ ሊያቀርቡት ይችላሉ። ይህ መካከለኛ ስርዓት ግንኙነትን ይቀላቀላልና ለለዋዋጭነት ፈጣን ምላሽ ይሰጣል። ምሳሌ እንደ; በኢሌክትሮኒክ ንግድ መተግበሪያም፣ እሴ የትዕዛዝ ፍጠር Domain ክስፍል የክፍያ ስርዓትን እና የባለጭነት ኩባያዎችን ለመውሰድ እንደ ምሥክር ይጠቀምበታል።

ተገኝ የሆኑ እና ተከታታይ አይደሉ አገልግሎቶች እና ችግኝቶች

Domain-Driven Design (DDD) ብዙ ጥራቄ ሲያቀርብም፣ ተጨማሪ ተገኝ የሆኑ እና በዘወትር አሳየው ችግኝቶች ያሉበት ነው። እነዚህን ችግኝቶች ማወቅ፣ DDDን መተግበሪያ ሲደገፍ የሚያገኙ ችግኝቶችን ንዴት አልሳየም ብለው እንዲዘገቡ እና የፕሮጀክት ስኬት እንዲጨምሩ ይረዳቸዋል። በዚህ ክፍል፣ DDDን ተገኝ የሆኑ እና ችግኝቶቹን በዝርዝር እንሣየቃለን።

DDDን በስኬት ለመተግበር፣ በDomain ሙያዎች እና አበልፉ መሳሪያዎች መካከል ውጤታማ አውታረ ግንዛቤ እና ትብብ ስራ ያስፈልጋል። የDomain ዕውቀትን በትክክል መከላከል እና ወደ ሶፍትዌር እስከ ስምንያት የሚወስዱ ይወዳጅ ናቸው። ነገር ግን፣ የDomain ውክልና ባልታወቀ ጊዜ፣ ይህ የትክክል ግንዛቤ እና መረጃ በጣም የሚያበሳ እና ትክክል የሆነ ጊዜያዊ ነገር ሊሆን ይችላል። ከዚህም በላይ፣ የDomain ሙያዎችና አበልፉ የሚያወቅ ቃላት ሲለያያዙ፣ ግንዛቤ መቈየት እና የውክልና አሻችለው የደረሰ ሰብ ከባድ ችግኝት መከላከል ይችላል። ስለዚህ፣ በአንድ ቋንቋ አገናኝት ማድረግ እና የዘወትር ግንኙኙም አመቻችሄ ግምገማ ሆኖ ይገባል።

    የተገኝ አገልግሎቶች እና ችግኝቶች

  • የማዕከላዊ ትምህርት መለዋዋጭነት: DDDው የሚያስፈልጉ ዋና ሐሳቦችን እና መለዋዋጭነቶችን ለመረዳት ጊዜ ይወስዳል። ለቀድሞ በሌላ አጠናቅላዊ ልዩነት ጠቀሙ ታጋላቂዎች የሚያመለከቱ የማዕከላዊ ትምህርት ችግኝት አለ።
  • የውክልና ችግኝት ያደርጉት ማደሻ: በትልቅና ውክልና የተጣለ domain ግኝት DDDን መተግበር፣ የምድር ማደሻ እና ማዕከላዊ ውድድር ያበሳ ይሆናል።
  • የግንዛቤ ችግኝቶች: Domain ሙያዎችና አበልፉ ለተማሪዎች የግንዛቤ አያካያሪዎች ምክንያት የናበታዎቹ ውክልና እና የውክልና በትክክል ውጤት አሟሟላል።
  • የሃላቃ መዋቅረኛ ወጪ: DDD መተግበር በመጀመሪያ በጣም ጊዜ እና ሃብት ያስፈልጋል። የdomain ሞዴል መፍጠርና በዘወትር ማከል ጊዜ እና እንቅስቃሴ ያስፈልጋል።
  • የመሰረት መዋቅረኛዎች ምክንያት: DDDን በአንዳንድ ትኦተሖች መተግበር፣ የተለያዩ ትኦተሖች ያስፈልጋሉ። ለምሳሌ፣ Event Sourcing እንደምንም አዝራር፣ ልዩ የውክልና የድንበር እና ማስተካከል መፍትሄዎች ያስፈልጋሉ።
  • የቡድኑ ተገኝታ: DDD ለስኬት በሚያደርሱ ጊዜ፣ ሁሉንም የቡድኑ አባላት የDDD መለዋዋጭነቶችን ለመከተል ማስፈላለት አለባቸው። ወደዚህ ሲላኸው፣ ውክልና ስርዓት እና የተለያዩ ሶፍትዌሮች ሊደርሱ ይችላሉ።

DDDን መተግበሪያ፣ በተለይ በሚከፈቡ ማዕከላዊ ስርዓት እና ማዕከላዊ microservice መሆኑ እንዳይሳይ፣ የውክልና ማቋቋሚያ እና የእሴት ትስስሳ ችግኝት አደርጋለች። በተወያዩ አገልግሎቶች መካከል የውክልና ማቋቋሚያን ለማድረግ እና በሚፈልጉ አገልግሎቶች ማዕከላዊ እንቅስቃሴዎች ማድረግ ምቹ ቴክኒክ መፍትሄዎች ያስፈልጋሉ። ይህ የስርዓቱን ጠፋቹነት ይጨምራል እና የበሳለቀ ችግኝቶችን አበረታት ይችላል።

DDDን ለፕሮጀክት ሁሉ መረጃ የሆነ መፍትሄ አይሁንም እንደሚሆን ማስታወሻ አለው። ቀላል እና ትንሽ ፕሮጀክቶች ላይ፣ DDD የሚያደርገው ተጨማሪ ውክልና እና ውጤታዊ ወጪ፣ የሚያገናው ጥቅምን ግለጣ፣ ይወጣል። ስለዚህ፣ የፕሮጀክቱን ፍላጎት እና ውክልናን በትክክል ማስተካከል እና DDD ተለዋዋጭ እንደሆነ ከዚማው ውጤቶቹን የሚለው ይገባል። የሚሆነው፣ በማስፈላለት ውክልናዊ ችግኝቶች የተሠራ መፍትሄ የሚተገበር ሊያስከትል ይችላል እና ፕሮጀክቱ በአያያዝ ውጤት ሊያበሳ ይችላል።

Domain-Driven Design እና የቡድን ሥራ

Domain-Driven Design (DDD) በልዩ ቴክኒክ አቅራቢ እንደሆነ ብቻ ሳይቆይ፣ በፕሮጀክት ስኬት ውስጥ የቡድን ሥራና ተሳትፎ እንደሚያስቀይ ባህሪ በጣም አስፈላጊ መሆኑን ጠቀሰ። DDD በውስጡ የስራ ዘርፉን በጥልቅ ተገናኝቶ መረዳት እና ይህ ተረዳዳት ወደ ሶፍትዌር እቅድ ልከት ይዞ አሳየ። ይህ ሂደት ከተለያየ ሃላፊነት ያላቸው ቡድን አባላት (የትዕዛዝ ባለሙያዎች፣ ለማእከል፣ የሙከራ ባለሙያዎች፣ ወዘተ) ዘወትር መግባባትና አንድ ቋንቋ አጠቃቀም የሚፈልግ አስፈላጊነት አለው። የቡድን አባላት ላይ ያለው ይህ ሲነርጅ የተጠቃሚ ጥንቃቄ እና ውጤታማ መፍትሄዎች የሚተርፉበትን ዕድል ይሰጣል።

DDD በቡድን ሥራ ላይ ያለው ተጽዕኖ በጥልቅ ለመገናኘት፣ በስራ ሶፍትዌር አደጋ ፕሮጀክት ውስጥ ተለያዩ ሚናዎች እንዴት ይደርሳሉ በማምለከት እንመለከታለን። ለምሳሌ፣ የትዕዛዝ ባለሙያዎች የስራ ይለውጦችን ሲያበርኩ፣ ለማእከል ይህን ይለውጦች ወደ ቴክኒክ መፍትሄ ያሳድጋል። DDD ይህን መናገት በማስተላለፊያ ያደርጋል፣ የስራ ይለውጦች እንደሚኖሩበት ወደ የቴክኒክ እቅድ በትክክል ይውሰድ። በዚህ መካከል፣ የቅርብ ተረዳዳትና ሳብ ጥቂት ስህተት ተከላከል፣ ፕሮጀክቱ በውሳኔ ስራ ሥራ ይቀጥላል።

የቡድን ሥራ ላይ ያለው አሳይ

  • በሁሉም ቦታ ሚገባ ቋንቋ (Ubiquitous Language) ይፈጠራል፣ ይህም መረዳዳትን ይቀለልል።
  • የስራ ዘርፉ የተስተካከለ ምረዳዳትና ማጠራቀም ይረዳል።
  • ከተለያዩ ሙያ የመጡ ቡድን አባላት ተሳትፎ ይጨምራል።
  • የውሳኔ ሂደቶችን ይሻሻል፣ በቅርብና ተያያዥ ውሳኔዎች የሚኖሩበትን ያደርጋል።
  • ሶፍትዌሩ ለየትዕዛዝ ፈላጊ ይደራል፣ ይህም የደንበኞች ማርከኛነትን ይጨምራል።
  • የፕሮጀክት አደጋዎችን ይቀንሳል፣ ጥቂት ስህተትና ቅርብ ተረዳዳትን ይቆረጣል።

DDD የቡድን ሥራ ላይ ያለው አሳይ በመረዳዳት ብቻ አይቆርጥም። በተመሳሳይ የሶፍትዌር አደጋ ሂደት ሁሉ ተሳትፎን ይከታተላል። ለምሳሌ፣ የየስራ ሞዴል እቅድ በቡድን አባላት ሁሉ ሚካተትበት ሂደት ይደረጋል። ይህን በማድረግ፣ በተለያዩ አይነቶች ይታወቃሉ እና በጥልቅ የተስተካከለ ሞዴል ይፈጠራል። በተጨማሪ፣ የሙከራ ሂደቶችም DDD የሚታወቀው አካል አንዱ ናቸው። የሙከራ ባለሙያዎች የየስራ ሞዴልንና የስራ ደንቦችን በመሙከራ፣ ሶፍትዌሩ በትክክል እንደሚሰራ ያረጋግጣሉ።

Domain-Driven Design የቡድን ሥራና ተሳትፎን የሚከታተል አቅራቢ ነው። DDD በቅርብና በተሳትፎ በተሳሳተ አባላት ላይ የሚተስፋፋ በቅርብ መረዳዳትና ተሳትፎ ስራ ይታወቃል። ይህን በመድረግ፣ ቅርብ፣ ውጤታማና ለየትዕዛዝ አገልጋይ ሶፍትዌር ይገነባል። DDD በቡድን ሥራ ላይ ያለው አሳይ ፕሮጀክቱን በሚጠቅመው ደረጃ ማሳመን ይችላል።

ውጤት እና የሚተገበሩ ምክሮች

Domain-Driven Design (DDD) የተደበቀ የንግድ ችግሮችን ለማስተካከል ኃይለኛ አካሄድ ነው። በዚህ የብሎግ ሰነድ ውስጥ DDD ምን እንደሆነ፣ ጥቅሞቹ፣ ከሶፍትዌር አርእስት ጋር ያለው ግንኙነት፣ ተግባራቶቹ፣ አስፈላጊ አካላቶቹ፣ የፕሮጀክት መጀመሪያ ሂደቶቹ፣ ምርጥ ተግባራት፣ ችግሮች እና በቡድን ውስጥ ያለው ተፅዕኖ ተወላጅ ቅኝት እንደሚፈጥሩ፣ ተመራማሪነት እና ሙሉ የተስፋፋ ሲስተሞች ለመጎምጎም ተምልከት ነው። DDD በትልቅና በተደበቀ ፕሮጀክቶች ላይ የንግድ ግብ ግልጽነትን በሶፍትዌር ውስጥ ያካትታል፣ የሚቀየር እና ቀላል ሊገባ በሚችል ሲስተም ይሁን ዘንድ ያደርጋል።

DDD’ን መሠረታዊ አካላት እና ጥቅምዎች

ውጤት እና የሚተገበሩ ምክሮች
አካል መግለጫ ጥቅም
የአካባቢ ሞዴል የንግድ አካባቢን የሚያጠቃልል የድግግሞዝ ምሳሌ ነው። የንግድ የስራ ፍላጎቶችን በጥልቅ እንዲታወቁ ይረዳል።
Ubiquitous Language በአዲስ እና ንግድ ባለሞያዎች መካከል የአካባቢ ቋንቋ። የአካባቢ ቋንቋ የአስተላላፊነት ስህተቶችን ይቀንሳል እና የትክክል ያልሆነ ተስተካከያን ይከላከላል።
የተገደበ አካባቢዎች የአካባቢ ሞዴል በበለይትነት የተወካዩ ክፍሎች ነው። ውስንነትን በትንሽ አካባቢዎች ያከፋፋል።
Repository’ች የውስጥ ዳታ ዝርዝር አግናኝነትን ያደርጋል። የዳታበዝ እገዳን ያሳነሳል እና የመሙከራ ችሎታን ይጨምር።

DDD’ን በአስተዋፅኦ መተግበር፣ ስለመሰረታዊ ቴክኒክ ብቻ ሳይሆን፣ ከንግድ ባለሞያዎች ጋር ቅርብ ተስማማት እና ቀጣይ ማማዋየት ያስፈልጋል። በትክክል ካልተጠቀሰ፣ ከፍተኛ ውስንነት እና የማያዳክም ወጪዎችን ይያዛል። ስለዚህ፣ DDD መሠረቶችን እና ተግባራቶቹን በጥንቃቄ ማወቅ እና ስለፕሮጀክቱ የሚያስፈልጉ ፍላጎቶች ለሚስተው ማዕቀፍ በጣም አስፈላጊ ነው።

    የሚተገበሩ ውጤቶች

  1. ከአካባቢ ባለሞያዎች ጋር ቀጣይ መነጋገር: የንግድ ፍላጎቶችን ሙሉ ለሙሉ ለመረዳት፣ በደጋግሞ ከባለሞያዎች ጋር ይወዳድሩ።
  2. Ubiquitous Languageን ያድርጉ ይጠቀሙ: በተገናኘው ልዩነት እና ንግድ እንደሆነ ቡድን ውስጥ የጋራ ቋንቋ ያቅርቡ ይጠቀሙ።
  3. የተገደቡ አካባቢዎችን ያስተካክሉ: የትልቅ አካባቢዎችን መስክ በትንሽ እና የሚቀጣጠል ክፍሎች ይከፍሉ።
  4. የአካባቢ ሞዴልን ያሻሽሉ: የአካባቢ ሞዴልን ቀጣይ ማሻሻያ ያድርጉ እና በንግድ ፍላጎቶች ለሚስተው ቅርጸት ያድርጉ።
  5. የፈተና ማቀናበሪያን ይጠቀሙ: DDD መሠረቶችን በፈተናዎች ድጋፍ ያድርጉ እና የማትወደው ድጋፎችን ይከላከላሉ።

Domain-Driven Design በሶፍትዌር ልማት ሂደት ውስጥ ስታቴጂክ አካሄድን ያቀርባል። በትክክል ካሰናዳ፣ የንግድ ፍላጎቶችን የሚያሳስበው፣ ተስፋፋ እና የሚቀየር ሲስተሞችን ለመገንባት ይረዳል። ነገር ግን፣ ለሁሉም ፕሮጀክት ምናልባት ተገቢ አይሆንም እና የበጣም በጥንቃቄ እየተገለጸ ይወዳድር። አስተዋፅኦ ለሆነ DDD ተግባር፣ ቀጣይ ማማዋየት፣ መስማማት እና የማስተካከል ችሎታ ያስፈልጋል።

ብዙ ጊዜ የተጠየቁ ጥያቄዎች

Domain-Driven Design (DDD) አቀራረቡን ከባለሞያ የሶፍትዌር እድሳት ዘዴዎች የሚለዩት ዋና ባህሪዎች ምንድናቸው?

DDD በቴክኒካዊ ዝርዝሮች ላይ ከመጠን የተቃረበ፣ በየኢል ስፍራው (domain) ላይ የሚታበይ አቀራረብ ነው። የኢል ስፍራ ባለሙያዎችና ዲቭሎፐርዎች በአንደኛ ቋንቋ (Ubiquitous Language) በመጠቀም የኢል ስፍራ ፍላጎቶችን ይላቀቁ እና ሶፍትዌርን በእነዚህ ፍላጎቶች መሠረት ያዘጋጁ። በባለሞያ ዘዴዎች የመጀመሪያ ነገር በተመለከተ የውስጥ ቋንቋ ማህደር አውድ ወይንም የተጠቃላይ የተጠቃላይ የተጠቃላይ ግጥምናዎች ከተጠቃላይ በተቃረበ፣ DDD የኢል ስፍራ አይነትንና የኢል ስፍራ ሞዴልን በመሃከል ያያከት።

DDD የፕሮጀክት ወጪን እንዴት ያስከትላል፣ ምን አይነት ቀላል/ችግኙ ፕሮጀክቶች ላይ አይነት/ከዚህ ተነሳ የሚፈጠር ወጪ እንደሚጨምር የሚገባበር?

DDD በመጀመሪያ የኢል ስፍራን መረዳትና መደምደም አስፈላጊ ነው፣ ይሄም የፕሮጀክት ወጪን ያያስከትላል። ለሚያበረታታው የኢል ስፍራ ውስጥ የሚገኙ ፕሮጀክቶች ወጪው ከአንደኛ በዋነኛ ይሄዳል። ግን፣ በእድሜ ውስጥ የኢል ፍላጎቶች ተስተካክሎ ሊለዋዋጭ እንደሚችል፣ በጥቅም የሚሞላ፣ ማደራ በቀላሉ የሚሞላ ሶፍትዌር በዚህ አቀራረብ ውጤት ይሰጣል፣ ወጪ ጥቅምን ይሰጣል። በቀላሉ ያሉ ፕሮጀክቶች ውስጥ የDDD የሚያመጣው ውስታታ ወጪውን ይጨምራል ስለዚህ እምብደት/ወጪ ሚዛን በቅን መተያየት አስፈላጊ ነው።

የሶፍትዌር አርእስትና Domain-Driven Design በሚመስሉ ምሳሌ ትምህርት ስህተት ሊታወቅ ይችል?

ለምሳሌ፣ በኢ-ንግድ አፕሊኬሽን የሶፍትዌር አርእስት፣ አፕሊኬሽኑ አጠቃላይ አዋቂዎችን (ደረጃዎች፣ ሞዱሎች፣ ሲርቪሶች) ይወጣጣል፣ DDD ደግሞ ‘እቃ’, ‘ትዕዛዝ’, ‘ደንበኛ’ የኢል ስፍራ አይነቶችንና በእነዚህ ላይ አሉ መገናኛዎችን ይገልጽ። የሶፍትዌር አርእስት የአፕሊኬሽኑን ቴክኒካዊ ግንዛቤ በሚያገኛበትም፣ DDD የኢል ስፍራ አይነቱንና ሞዴልን እንዲሁ ላይ ይገናኛል። ጥሩ ሶፍትዌር አርእስትት DDD መርሆችን በቀላሉ እንዲተያዩ ያደርጋል እና የኢል ስፍራ ሞዴሉ እንዲሉ በተቋረጠ ያደርጋል።

DDD መርሆችን እንዲተያዩ የሚረዱ መሳሪያዎችና ቴክኖሎጂዎች ብዙ ጊዜ እንዴት ይሰሩ?

DDD ውስጥ የሚጠቅሙ መሳሪያዎችና ቴክኖሎጂዎች በጣም የተለዋዋጭ ናቸው። ORM (Object-Relational Mapping) መሳሪያዎች (ለምሳሌ Entity Framework, Hibernate) የኢል ሞዴሉን ወደ የተማሪቱ ቋንቋ ማህደር ለማሳየት ይውሀሉ። CQRS (Command Query Responsibility Segregation) እና Event Sourcing እንደ ሳይንክ ማዋቀራዊ ዲዛይኖች የኢል ሞዴሉን እንደምን ሚታየውንና ሚጻፈውን ይበልጥ ያደርጋሉ። እንዲሁም የMicroservice አርእስት የየኢል ስፍራዎችን በበለጠ በቀላሉ እና በእውነት የሚሞላ መስክል ያበረታታል። እንደ ፕሮግራሚንግ ቋንቋ እንደ Java, C#, Python የኦቤጅክት ትክክል ቋንቋዎች ብዙ ጊዜ ይረዳሉ።

በDDD 'Ubiquitous Language' ተቃራኒው ለምን አስፈላጊ ነው እና ይህን ቋንቋ ለማቅረብ ምን ታስበው ያዘጋጁ?

'Ubiquitous Language' የኢል ስፍራ ባለሞያዎችና ዲቭሎፐሮች በአንደኛ ቋንቋ እንዲሠሩ፣ የኢል ፍላጎቶችን ተስተካክልና በቀላሉ እንዲያውቁ ያደርጋል። ይህ ቋንቋ የኢል ሞዴሉ መሠረት ነው እና በኮድ፣ ማብራሪያ፣ ግኝ ቦታ የታመነ መልኩ ይሰራል። Ubiquitous Language አዘጋጅታ ውስጥ የኢል ስፍራ ባለሞያዎች ማስኬያ አሳለፉ ነው። የቃላት ምርጫ የትክክለኛ ተስማሚነት ያሳያው በመደምደም እና በማጠናከር ልዩ ቃላት ይመዘገባል። በዘመናዊ እሴት ዘመናዊ ይዘንና ከዚህ በላይ የኢል ሞዴልን ያቀርባል።

DDD የፕሮጀክት መጀመሪያ ሲደርስ ምን ያደርገዋል እና ምን የቅድመ አዘጋጅት አስፈላጊ ነው?

DDD የፕሮጀክት መጀመሪያ ሲደርስ በመጀመሪያ የኢል ስፍራን በጥልቀት አንዱ መተያየትና ከdomain ባለሞያዎች ጋር መስራት አስፈላጊ ነው። የdomain ሞዴልን ማቅረብ፣ ዋናዎቹ entityዎች፣ value objectዎችና serviceዎችን ማውጣት ይወስዳል። Bounded Contextዎችን በማገልገል domain ውስጥ በተለያዩ አውቅናዎች እንዲተያዩ ያደርጋል። Ubiquitous Language የተያያዙ ቋንቋ እንዲተያዩ ይተያያይራል። ወደ ኋላ፣ የሶፍትዌር አርእስትት የdomain መልኩን በቅን ያደርጋል እና የሶፍትዌር አቀድ ምሪት ይተያዩ ይጀምራል።

DDD የሚታወቀው አንዳንድ ተከላካሊ ወይንም ችግሮች ምንድናቸው፣ እና እነዚህ ችግሮች በእንዴት ይቻላሉ?

DDDን ያለባለት ትልቅ ችግኝ ከባድ የሥራ ስፍራ ውሂብን ማቅረብ ነው። ይህ ሂደት ጊዜ የሚያስጠብቅ ሊሆን ይችላል፣ እና በትክክል የማልለው ማዕከል የፕሮጀክቱን ውድቅ ሊያስከትል ይችላል። ሌላ ችግኝ ደግሞ DDD መሠረት በፕሮጀክቱ ሁሉ ቡድን አባላት የተቀበሉ እንዲሆኑ ማድረግ ነው። እነዚህን ችግናት ለመግለባት ቀጣዩ መገናኛ፣ ማስተማር፣ እና በቡድን ውስጥ ብቁነት አስተላለፊ በጣም አስፈላጊ ናቸው። ነገር ግን iterative አቅራቢያ በመቀበል፣ የሞዴልን ጥራት እያደገ መሆን ይችላል። በቀላሉ ፕሮጀክቶች ደግሞ DDDን እንደ ገና አብሮ የሚገኘው ውሆኔነት ወጭዋን ሊያበረታ ስለሚችል በጥንቃቄ መቀበል ይገባል።

DDDን የቡድን ሥራን እንዴት እንደሚያስፈነጭ እና ይህን አቅራቢያ በተሳካ ሁኔታ ለማሳከን የቡድን አባላት ምን ሁኔታዎችን ይናተቡ የሚጠይቁ እንደሚችሉ መረጃ ስጡኝ?

DDD የቡድን ሥራን በብቁነትና መገናኛ ላይ ታትሞ ይገኛል። የመስፈሪያ አባላት የሥራ ስፍራውን ማንፀባረቅ እና በአስተዳደር ላይ ጋር በተገቢ ሁኔታ ማግኘት በጣም አስፈላጊ ነው። የቡድን አባላት ሞዴል በማቅረብ ረዳት፣ በdomain ልዩነት እና በሶፍትዌር አዲስነት በተለያዩ ረዳት ይወዳድቡ የሚገባው የDDDን አሳከን በተሳካ ሁኔታ ነው። በተጨማሪም ቡድን አጋይል መሠረቶችን በመቀበል እና ቀጣዩ ግብዓቶችን በመያዝ የሞዴልን እና ሶፍትዌሩን ማሻሻል ይችላሉ።

ይህንን ጽሑፍ አጋራ፡

የHostragons ቡድን

ስለ ማስተናገጃ፣ ሰርቨሮች እና የጎራ ስሞች ከባለሙያ ቡድናችን የተውጣጡ ወቅታዊ መመሪያዎች። ለፕሮጀክትዎ ትክክለኛውን መፍትሄ አብረን እናግኝ።

እኛን ያግኙን