2010-05-11 7 views

cevap

15

Yeni örnekler, Spring'in bağımlılık yönetimini atlayacak; yapılandırılmış singleton çekirdeğini uygulama içeriğinden almanız gerekir. Bunu kullan:

'özelliği' bir hizmet, yani FooBarService için kısmi fasulye adı olduğunu varsayar
def service = ApplicationHolder.application.getMainContext().getBean("${property}Service") 

, mülkiyet 'filanca' olması gerekir. o filanca 'ise o zaman GrailsNameUtils.getPropertyName kullanabilirsiniz() bunu düzeltmek için:

import grails.util.GrailsNameUtils 

String beanName = GrailsNameUtils.getPropertyName(property) + 'Service' 
def service = ApplicationHolder.application.getMainContext().getBean(beanName) 
+0

Yay, işe yarıyor. GetBean yöntemini denedim, ancak 'FooBar' kelimesini geçiyordum :) – rukoche

+0

Yukarıdaki gibi çalışmadım .getMainContext.' yerine .getMainContext(). ' – sebnukem

+0

ile teşekkürler. düzenleme yanlış reddedildi –

0

Evet. Hizmetler etki alanı nesnelerine enjekte edilmez. Etki alanı nesneniz belirli bir kullanım durumu için bir şeye ihtiyaç duyarsa, kullanım durumunun sahibi olan hizmetin, etki alanı nesnesinin adına diğer hizmeti çağırmasına izin verin.

+2

Herhangi bir Spring fasulyesi, kontrolörlerde olduğu gibi alan adı sınıflarına, yani "def fooService" 'e enjekte edilebilir. Bunun için yaygın kullanım durumu, özel bir doğrulayıcıda bir servisi çağırmaktır. –

+0

Olabilir; Sadece olması gerektiğine katılmıyorum. Bir doğrulayıcı, Hesap veya Kişi gibi bir alan nesnesinden farklıdır. Tamamen farklı bir kullanım çantası. – duffymo

3

IMHO alanı sınıfları hiç mantığı içermemelidir (ayrı doğrulayıcılarını oluştururlar). Projelerimde

Normalde (sınıfın Kullanıcı için örneğin UserService) her etki sınıfı için bir hizmet oluşturmak ve normalde alanı sınıfında olacağını parçalar halinde, orada bile küçük bit tüm mantığı sopa.

Java/C++ dünyasından gelen birçok programcının bu çirkin bulmaya eğilimli olduğunu düşünüyorum, ancak Grails mimarisine daha iyi uyuyor.

+3

Grails alan sınıflarının mantık için gerçekten uygun olmadığı doğru, ancak bu bir ayıp çünkü bu konuda Fowler ile anlaşmak zorundayım: http://en.wikipedia.org/wiki/Anemic_Domain_Model – Kimble

+1

Gerçekten de Eric Evans, birilerinin "alan adı sınıfları mantığı içermemesi gerektiğini" söylediğinde, muhtemelen güçlükte bir rahatsızlık hissediyordu. Bu bir Domain nesnesi anti-pattern'e benziyor ve Domain-Based Design'a tamamen ters geliyor. –

+0

Benim durumumda, grails ortamına dayalı bir indeks TTL ayarlamak istiyorum. Bunun için daha iyi bir model nedir? – Kirby