आपकी पहली धारणा सही नहीं है, एमवीसी वास्तव में डीडीडी के साथ फिट नहीं है, सीक्यूआरएस पैटर्न का उपयोग करने के लिए एक बेहतर तरीका होगा।
आपकी दूसरी धारणा भी सही नहीं है इमारतों ब्लॉक सभी डोमेन मॉडल फ़ोल्डर में नहीं हैं, वास्तव में, यहां अपनी परियोजना के लिए एक अच्छा संरचना है,:,
ProjectName/
Application/
Blog/
Command/
CommentToBlogPostCommand.php
ChangeCommentContent.php
DescribeBlogPostCommand.php
NewBlogPostCommand.php
...
Data/
BlogPostData.php
BlogPostCommentsData.php (POPO containing BlogPost infos and the comments array)
CommentData.php (Single comment infos)
BlogPostApplicationService.php
BlogPostQueryService.php
CommentApplicationService.php
CommentQueryService.php
Identity/
Command/
AuthenticateUserCommand.php
ChangeEmailAddressCommand.php
ChangeUserPasswordCommand.php
ChangeUserPersonalNameCommand.php
DefineUserEnablementCommand.php
RegisterUserCommand.php
UserApplicationService.php (this defines the actions that can be done by your application related to user domain, injected in presentation layer responding to user events)
UserQueryService.php (this will usually be injected in your presentation layer)
Domain/
Model/
Blog/
BlogPost.php
BlogPostClosed.php (this could be a list of possible events)
BlogPostDescriptionChanged.php
BlogPostModeratorChanged.php
BlogPostReopened.php
BlogPostStarted.php
BlogPostRepository.php (interface)
Comment.php (this is an Entity, or Aggregate Root)
CommentContentAltered.php (this could be an event)
CommentAuthor.php (this could be a ValueObject, containing the username)
CommentRepository.php (interface)
CommentedToBlogPost.php (this could be another event when adding a comment to a blogpost)
...
Identity/
ContactInformation.php (VO or Person)
Enablement.php (VO of User)
EmailAddress.php (VO of ContactInformation)
FullName.php (VO or Person)
Person.php (ValueObject of User)
User.php (constructor visibility might be package-protected)
UserFactory.php
UserRepository.php (this is an interface)
UserService.php (this is a domain service)
Infrastructure/
Persistence/
LavarelBlogPostRepository.php (this implements BlogPostRepository)
LavarelCommentRepository.php (this implements CommentRepository)
LavarelUserRepository.php (this implements UserRepository)
Interfaces/
...
इस तरह आप एक छद्म MVC रख सकते लेकिन अंतर और नियंत्रक इंटरफ़ेस पैकेज में अंतर के साथ, और रिच मॉडल डोमेन/मॉडल पैकेज में है। आप केवल एप्लिकेशन सेवाओं के माध्यम से मॉडल में हेरफेर कर सकते हैं, और क्वेरी सेवाओं के माध्यम से मॉडल से पूछताछ कर सकते हैं। क्वेरी सेवाएं आपको मॉडल प्रतिनिधित्व के लिए तेज़ी से पहुंच प्रदान करती हैं, और नियंत्रक के रूप में व्यवहार करने के लिए आदेश सेवाओं को आदेश भेज दिए जाते हैं।
टिप्पणी नोट करें लेखक वर्ग एक मूल्य वस्तु हो सकती है, जिसमें डेटाबेस की उपयोगकर्ता आईडी नहीं है बल्कि एक अद्वितीय उपयोगकर्ता नाम है। चूंकि उपयोगकर्ता समग्र रूट किसी अन्य पैकेज से है: जो एक डोमेन PointOfView से समझ में आता है। हम इसे एक पहचान (या उपयोगकर्ता नाम) कह सकते हैं। यह आदर्श रूप से उपयोगकर्ता तालिका के एक अद्वितीय कॉलम पर मैप किया जाएगा, लेकिन टिप्पणी तालिका का अनुक्रमित मूल्य होगा।
एक और विकल्प ब्लॉग पैकेज में उपयोगकर्ता को उसी अवधारणा के हिस्से के रूप में उपयोग करना होगा जो एक ब्लॉग है लेकिन डीडीडी इस दृष्टिकोण की अनुशंसा नहीं करता है। असल में यह आपको एक अलग बाध्य संदर्भ में पहचान और पहुंच डालने की सिफारिश करेगा, लेकिन मुझे लगता है कि आप जिस आवेदन को लिख रहे हैं उसके संदर्भ में उपयोगकर्ता को मैपिंग लिखना एक टिप्पणी के हिस्से के रूप में ठीक हो सकता है।
आधारभूत संरचना परत में, आप अपने दृढ़ता प्रदाता को परिभाषित करते हैं, इस तरह, जिस दिन आप सिद्धांत पर स्विच करना चाहते हैं, केवल इस पैकेज में कार्यान्वयन को बदलना चाहिए।
एप्लिकेशन परत सुरक्षा, अवधि लेनदेन संबंधी संदर्भ, और उच्च स्तरीय घटनाओं को लॉग करने के लिए ज़िम्मेदार है।
यदि आपको कुछ स्पष्टीकरण की आवश्यकता है तो मैं आपको कक्षाओं के शिष्टाचार के बारे में अधिक जानकारी प्रदान कर सकता हूं। इसके अलावा इस पराक्रम की आवश्यकता है कुछ बुनियादी ढांचे या एक समर्थन ढांचे यह काम कर रहा करने के लिए, मैं सोच रहा हूँ:, entitites में
घटना डिस्पैचर उपलब्ध
घटना बस किसी तरह का
- निर्भरता इंजेक्शन, यदि आप की योजना इन घटनाओं का उपभोग करने के लिए।
"क्या यह सही डिजाइन है कि डीडीडी में सभी बिल्डिंग ब्लॉक मॉडल फ़ोल्डर (जैसे ऊपर दिखाए गए अनुसार) में लागू होते हैं जैसे संस्थाएं, सेवाएं, भंडार" - यह आपके ऊपर है कि आप कोड बेस को कैसे बनाते हैं। मेरे लिए यह प्रति बाध्य संदर्भ (जैसे ब्लॉग, उपयोगकर्ता) निर्देशिका में और इस निर्देशिका के भीतर ठोस वर्ग (उपयोगकर्ता, उपयोगकर्ता रिपोजिटरी, ...) के भीतर एक निर्देशिका रखने के लिए और अधिक समझदारी होगी। यह स्वाद का विषय है, लेकिन मैं सुविधा द्वारा पैकेज पसंद करता हूं और परत से नहीं .. –
एमवीसी यूआई आर्किटेक्चर का अधिक है। यह डीडीडी में अच्छी तरह से फिट नहीं है। –
डीडीडी और एमवीसी की तुलना न करें क्योंकि यह आपके फ़ोल्डर संरचनाओं को व्यवस्थित करने के तरीके के बारे में नहीं है। डीडीडी लगभग आपके तरीके को डिजाइन करने का तरीका है। डीडीडी में विभिन्न सामरिक और सामरिक पैटर्न शामिल हैं। एमवीसी सिर्फ एक सामरिक पैटर्न –