Nasıl depo desen doğru kullanmak için?
Merak ediyorum nasıl benim depoları gruplandırma olmalıdır? Bu örnekler gibi asp.net bu mvc üzerinde gördüm ve benim kitaplarda bunlar temelde veritabanı tablo başına bir depoyu kullanın. Ama alay ve eşyalar için depolar birçok depoları çağırmak için daha sonra giden bir sürü gibi görünüyor.
Onları grup etmem gerektiğini tahmin ediyorum. Ancak onları grup için nasıl emin değilim.
Şimdi kayıt bir Depo hepsi benim kayıt işini yaptım. Ancak güncellemem gerekiyor ve bunu yapmak için 3 depoları vardı önce 4 tablo gibi.
Örneğin bir tablo, bir lisans tablodur. Kayıt esnasında, kendi anahtarı bakıyorum ve eğer veritabanında olup olmadığını görmek için kontrol edin. Şimdi Eğer başka yere kaydı sonra diğer masada bu lisans anahtarı veya başka bir şey kontrol etmek istersem ne olur?
Tek nokta giriş(anahtar kontrol süresi değil) olabilir.
Ben bu durumda ne yapardı? Kodu tekrar(mola) KURU yeniden? Denemek merege bu 2 depoları ve birlikte umut yok yöntemlerdir gereken başka bir zaman(belki bir yöntemi denetler eğer kullanıcı adı kullanılır - belki ben gereken başka bir yerde).
Ayrıca eğer ben bunları birleştirin birlikte ederdim de 2 servis katmanları gidiyor aynı depoyu beri sanırım her mantık için 2 farklı parçaların bir site olur uzun ve ben olmalı adları gibi ValidateLogin(), ValdiateRegistrationForm(),ValdiateLoginRetrievePassword() vb.
Ya da Depoyu neyse ve sadece garip bir sondaj adı etrafında var diyorsun?
Sanki sabit bir depo olan bir general yeter ismi kullanabilirsiniz bunun için birçok noktalardan uygulama ve hala mantıklı ve sanmıyorum çağıran başka bir depo bir depo iyi bir uygulama mı?
CEVAP
Havuz deseni ile yaklaşık oynadı yanlış yaptığım bir şey - tıpkı senin gibi, o tablo 1:1 depo ile ilgilidir sanıyordum. Etki alanı Odaklı Tasarım bazı kuralları uygulayan - gruplandırma havuzları sorun genellikle kaybolur.
Depo Aggregate root başına ve tablo olmamalıdır. Bunun anlamı eğer varlık olmamalı canlı tek başına (yani - Registrant
katılan özel Registration
) - sadece bir kurumun değil bir depo olmalı güncellenen/oluşturulan/alınan depo ile toplam kök ait.
Elbette. birçok durumda, bu tekniğin azaltarak sayısı depoları (aslında daha çok bir teknik yapıya etki modeli) olamaz uygulanan çünkü her varlık olması gereken bir toplam kök (son derece bağlı etki, sağlayabilir kör tahmin sadece). Örnek - License
Registration
varlık, herhangi bir bağlam ile onları kontrol etmek mümkün olması gerekir, çünkü toplu bir kök gibi görünüyor.
Ama ardarda depoları (Registration
depo gerekirse License
depo referans verilir. bizi kısıtlamaz. Başvuru License
depo (tercih - IoC) bize Registration
nesne doğrudan kısıtlamaz.
Komplikasyonlar teknolojileri tarafından sağlanan tasarım kullanmamaya çalışıyorum falan sadece bir yanlış anlama. 2 havuzları inşa etmek istemezsin diye ServiceX
depoları gruplandırma iyi bir fikir değil.
Çok daha uygun bir isim vermek olacaktır - RegistrationService
yani
Ama hizmetleri genel olarak kaçınılmalıdır - genellikle anemic domain model yol nedenidir.
DÜZENLEME:
IoC kullanmaya başlar. Gerçekten bağımlılıkları enjekte ederek acıyı hafifletir.
Yazma yerine:
var registrationService = new RegistrationService(new RegistrationRepository(),
new LicenseRepository(), new GodOnlyKnowsWhatElseThatServiceNeeds());
yazmak mümkün olacak:
var registrationService = IoC.Resolve<IRegistrationService>();
P. s. common service locator sözde kullanmak için daha iyi olurdu ama bu sadece bir örnek.
bir WordPress kullanmak.bunu doğru kul...
Nasıl doğru C dış anahtar kullanmak iç...
Nasıl JavaScript Açığa modül desen kul...
Nasıl kat-sol kullanmak için zaman ve ...
Nasıl ClassLoader kullanmak için.() ge...