ben symfony 2.3 ve php doktrinini programı aşağıdaki modelleri vardır 2.Ayırma iş mantığı PHP Doktrini 2
kullanmak den:
- varlık al - Tipik bir müşteri siparişini
- varlık BadOrderEntry (alanlar : id, sipariş - sipariş ile tek yönlü bire bir ilişki, createdAt) oluşturma varlık BadOrderEntry
- depo BadOrderEntryReposi için
- fabrika BadOrderEntryFactory
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); } }
VE ANA SINIFI BadOrderList/düzenle/kaydetme varlığın yöntemlerini silmek
Bu sınıfın tasarımını gerçekten çok seviyorum. Bunun hakkında çok düşündüm. Her şey harika. FAKAT! Tek bir sorun var: yöntemlerde işlemler ekleme ve çıkarma işlemleri gerçekleştirilmelidir. PHP Docrine 2'de
İşlem kodu şuna benzer:
<?php
$em->getConnection()->beginTransaction();
try {
//... do some work
$em->getConnection()->commit();
} catch (Exception $e) {
$em->getConnection()->rollback();
throw $e;
}
Ama nasıl BadOrderList içinde bu kod çağırabilir?
Çok fazla zaman harcadım ve veritabanına (ve buna karşılık PHP Doktrini 2) bağlı olarak kaldırdım ve tekrar oluşturmak için? Artık bağımlılık, BadOrderEntryRepository ve BadOrderEntryManager sınıflarında gizli.
BadOrderList sınıfındaki işlem mekanizmasına bağımlılık nasıl gizlenir?
delete'I da yeniden düşünmeye önermek 'senin' Yöneticisi :: add' işlem yönetimini ekleyin ve
Ve o zaman sadece BadOrderEntryList için ORMBadOrderEntryManager enjekte edeceğiz senin tasarımı. Gerçekten hoş değil. Modelinizi kalıcı hale getirin. – Ziumin
@Ziumin İşlem yönetimini Manager :: add (veya delete) öğesine nasıl ekleyebilirim? Hangi tasarım problemleri? Müdür, doktrin nesnesi yöneticisi üzerinde ek bir soyutlama katmanıdır. Kötü değil ve iyi değil. Fakat daha fazla kontrol sağlar. – stalxed
Örneğinizde belirttiğiniz şekilde yapabilirsiniz. http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html#approach-2- Açıkça. Tasarım sorunlarına gelince, neden listenizin ANA nesnesi olduğunu düşünüyorsunuz? Hangi mimarinin bir parçası için ana? Yöntem ve sınıf isimlerini düşündün mü? Bütün modelini doktrin olmadan test edebilir misin? – Ziumin