DDD कुल सीमाओं में से एक के लिए कुछ और करने के लिए एक नहीं कई संस्थाओं के बीच में से एक कुल

0

सवाल

मैंने देखा है के बारे में एक ट्यूटोरियल DDD में जो यह कहते हैं कि अगर मैं सकल जड़ SnackMachine है, जो 30 से अधिक बच्चे तत्व बच्चे तत्व होना चाहिए में अलग-अलग कुल. उदाहरण के लिए, SnackMachine के बहुत सारे है PurshaseLog (30 से अधिक) और यह बेहतर है के लिए PurshaseLog में होना करने के लिए एक अलग समग्र. ऐसा क्यों है?

2
2

कारण को सीमित करने के लिए समग्र आकार की एक समग्र है, क्योंकि आप हमेशा के कुल स्मृति में है और आप हमेशा की दुकान पूर्ण कुल transactionally. एक बहुत बड़ा कुल कारण होगा तकनीकी समस्याओं.

उस ने कहा, वहाँ कोई नहीं है इस तरह के "30 बच्चे तत्वों" शासन में समग्र डिजाइन और यह मनमाने ढंग से लगता है के रूप में एक नियम है । उदाहरण के लिए, कम से कम बहुत बड़े बच्चे तत्वों हो सकता है तकनीकी रूप से भी बदतर की तुलना में 30 बहुत प्रकाश बच्चे के तत्वों. एक अच्छी तरह से भंडारण के समुच्चय के रूप में json दस्तावेज़, यह देखते हुए कि आप हमेशा पढ़ने और लिखने के दस्तावेजों के रूप में परमाणु के संचालन । यदि आपको लगता है कि यह इस तरह, आपको एहसास होगा कि एक समग्र डिजाइन का तात्पर्य है कि एक बहुत बड़े या यहां तक कि कभी-बढ़ते बच्चे के संग्रह के अंत में होगा समस्याओं के कारण. एक PurhaseLog की तरह लगता है में से एक कभी बढ़ती संग्रह.

के दूसरे भाग का नियम है कि कहते हैं, "यह एक अलग समग्र" भी सही नहीं है. आप नहीं बनाने के लिए समुच्चय, क्योंकि आप की जरूरत करने के लिए कुछ डेटा स्टोर और इसे में फिट नहीं है एक मौजूदा कुल. तुम बनाने के लिए समुच्चय, क्योंकि आप की जरूरत है लागू करने के लिए कुछ व्यापार तर्क और इस व्यवसाय तर्क की आवश्यकता होगी कुछ डेटा है, तो आप दोनों बातें एक साथ में एक समग्र.

तो, हालांकि, आप क्या समझाने के लिए अपने प्रश्न में बातें कर रहे हैं ध्यान में लेने के लिए जब डिजाइनिंग समुच्चय से बचने के लिए तकनीकी समस्याओं, मैं सुझाव है कि आप अपने ध्यान करने के लिए वास्तविक जिम्मेदारियों के कुल.

में अपने उदाहरण के लिए, क्या कर रहे हैं की जिम्मेदारियों SnackMachine? क्या यह सच में की जरूरत है (पूर्ण) की सूची PurchaseLogs? क्या संचालन होगा SnackMachine का पर्दाफाश? चलो का कहना है कि यह दिखाता है की खरीदउत्पाद की(productId) और LoadProduct(productId, मात्रा). निष्पादित करने के लिए अपने व्यापार के तर्क, इस कुल की आवश्यकता होगी उत्पादों की एक सूची और गिनती रखने के अपने मात्रा में उपलब्ध है, लेकिन यह नहीं होगा की जरूरत स्टोर करने के लिए खरीद लॉग इन करें. इसके बजाय, हर खरीद, यह हो सकता है एक घटना प्रकाशित ProductPurchased(SnackMachineId, ProductId, दिनांक, AvailableQuantity). तो बाहरी सिस्टम सदस्यता ले सकता है के लिए इस घटना है. एक ग्राहक रजिस्टर सकता PurchaseLog रिपोर्टिंग उद्देश्यों के लिए है और एक अन्य ग्राहक भेज सकता है कोई पुनः लोड करने के लिए मशीन जब शेयर कम था की तुलना में एक्स

2021-11-17 23:29:06
2

अगर PurchaseLog नहीं है, अपने स्वयं के कुल, तो यह निकलता है कि यह केवल प्राप्त किया जा सकता है या के रूप में जोड़ा बच्चे के हिस्से के संग्रह के SnackMachine.

इसलिए, प्रत्येक समय आप चाहते हैं जोड़ने के लिए एक PurchaseLog, आप चाहते हैं को प्राप्त SnackMachine के साथ अपने बच्चे PurchaseLogs जोड़ने के लिए, PurchaseLog अपने संग्रह करने के लिए. फिर परिवर्तन सहेजें पर अपने काम की इकाई.

क्या आप वास्तव में जरूरत है पुनः प्राप्त करने के लिए 30+ खरीद लॉग जो अनावश्यक हैं के प्रयोजन के लिए बनाने के उपयोग के मामले में एक नया खरीद लॉग इन करें?

अनुप्रयोग परत - विकल्प 1 (PurchaseLog है एक स्वामित्व वाली इकाई के SnackMachine)

// Retrieve the snack machine from repo, along with child purchase logs
// Assuming 30 logs, this would retrieve 31 entities from the database that
// your unit of work will start tracking.
SnackMachine snackMachine = await _snackMachineRepository.GetByIdAsync(snackMachineId);

// Ask snack machine to add a new purchase log to its collection
snackMachine.AddPurchaseLog(date, quantity);

// Update
await _unitOfWork.SaveChangesAsync();

अनुप्रयोग परत - विकल्प 2 (PurchaseLog है एक समग्र रूट)

// Get a snackmachine from the repo to make sure that one exists
// for the provided id.  (Only 1 entity retrieved);
SnackMachine snackMachine = await _snackMachineRepository.GetByIdAsync(snackMachineId);

// Create Purhcase log
PurchaseLog purchaseLog = new(
   snackMachine,
   date,
   quantity);

await _purchaseLogRepository.AddAsync(purchaseLog);

await _unitOfWork.SaveChangesAsync()

PurchaseLog - विकल्प 2

class PurchaseLog
{
    int _snackMachineId;
    DateTimne _date;
    int _quantity;

    PurchaseLog(
        SnackMachine snackMachine,
        DateTime date,
        int quantity)
    {
        _snackMachineId = snackMachine?.Id ?? throw new ArgumentNullException(nameof(snackMachine));
        _date = date;
        _quantity = quantity;
    }
}

दूसरा विकल्प इस प्रकार की आकृति अपने उपयोग के मामले में और अधिक सही और यह भी परिणाम में एक बहुत कम i/o के साथ एक डेटाबेस है ।

2021-11-18 13:22:33

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में