मैं सिम्फोनी 2.3 और php सिद्धांत 2.अलग व्यापार तर्क पीएचपी सिद्धांत 2
कार्यक्रम निम्नलिखित मॉडल का उपयोग से:
- इकाई व्यवस्था - एक विशिष्ट ग्राहक आदेश
- इकाई BadOrderEntry (खेतों : आईडी, आदेश - आदेश के साथ यूनिडायरेक्शनल एक-से-एक संबंध, createdAt) निर्माण इकाई BadOrderEntry
- भंडार BadOrderEntryReposi के लिए
- कारखाने BadOrderEntryFactory संस्था की खोज के तरीकों के लिए टोरी BadOrderEntry /बचाने
- प्रबंधक BadOrderEntryManager के लिए/संपादन इकाई के तरीकों को नष्ट BadOrderEntry
और मुख्य श्रेणी BadOrderList - बुरा आदेशों की सूची, इस वर्ग के कोड:
private $factory; private $repository; private $manager; public function __construct( BadOrderEntryFactory $f, BadOrderEntryRepository $r, BadOrderEntryManager $m ) { $this->factory = $f; $this->repository = $r; $this->manager = $m; } public function has(Order $order) { return $this->repository->existsByOrder($order); } public function add(Order $order) { if (! $this->has($order)) { $entry = $this->factory->create($order); $this->manager->save($entry); } } public function remove(Order $order) { $entry = $this->repository->findOneByOrder($order); if ($entry !== null) { $this->manager->delete($entry); } }
मुझे वास्तव में इस कक्षा के डिजाइन पसंद है। मैंने इसके बारे में बहुत कुछ सोचा। सबकुछ अद्भुत है। परंतु! एक समस्या है: लेनदेन में विधियों को जोड़ने और निकालने के तरीकों में संचालन किया जाना चाहिए। पीएचपी Docrine 2 में
लेन-देन कोड इस तरह दिखता है:
<?php
$em->getConnection()->beginTransaction();
try {
//... do some work
$em->getConnection()->commit();
} catch (Exception $e) {
$em->getConnection()->rollback();
throw $e;
}
लेकिन मैं BadOrderList अंदर इस कोड को कैसे फोन कर सकते हैं?
मैं बहुत समय बिताया है और हटाया डेटाबेस के आधार पर (और तदनुसार पीएचपी सिद्धांत 2), और इसे फिर से बनाने के लिए? अब कक्षाओं में निर्भरता BadOrderEntryRepository और BadOrderEntryManager में छिपी हुई है।
कैसे वर्ग BadOrderList में लेन-देन तंत्र पर निर्भरता को छिपाने के लिए?
अपने 'प्रबंधक :: add' के लेन-देन प्रबंधन जोड़ें और' delete'I भी आप पर पुनर्विचार करने की सलाह है कि आपके डिज़ाइन। यह वास्तव में अच्छा नहीं है। अपने मॉडल को लगातार स्वतंत्र बनाओ। – Ziumin
@Ziumin मैं प्रबंधक :: जोड़ें (या हटाएं) में लेनदेन प्रबंधन कैसे जोड़ सकता हूं? क्या डिजाइन समस्याएं? प्रबंधक बस ऑब्जेक्ट मैनेजर प्रबंधक पर अमूर्तता की एक अतिरिक्त परत है। यह बुरा नहीं है और यह अच्छा नहीं है। लेकिन अधिक नियंत्रण देता है। – stalxed
आप इसे उसी तरह से कर सकते हैं जैसा आपने अपने उदाहरण में उल्लेख किया है। http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html#approach-2-explicitly। डिजाइन समस्याओं के लिए - आपको क्यों लगता है कि आपकी सूची मुख्य वस्तु है। आप वास्तुकला के किस हिस्से के लिए मुख्य? क्या आपने विधि और कक्षा के नामों के बारे में सोचा है? क्या आप सिद्धांत के बिना अपने पूरे मॉडल का परीक्षण कर सकते हैं? – Ziumin