Typically when I'm designing a system, I try and make the service methods rather atomic and keep the objects returned by them as shallow as possible. The domain objects should be populated by someone else, not themselves, as this creates a very strange dependency tree. Just my two cents.
Cheers. On Dec 10, 2007 4:01 PM, Kristian Marinkovic < [EMAIL PROTECTED]> wrote: > thank you all for your input... > > Domain Objects sometimes (quite often:)) need other services > to meet their function. if you retrieve your entities from say Hibernate > you can use the Tuplizer to inject any other services you need. > You can also achieve this if you ALWAYS create your Domain > Objects using a factory that has all necessary dependencies injected. > > the problem is the "new" operator. every time i create a Domain Object > manually i'd have to have all dependencies ready and pass them to the new > instance through the contructor (or setter methods). and sometimes it does > not feel right to have a service injected into a Domain Object only > because > it could instantiate another object that needs this service. > > i thought a solution to this problem were to use a library for class > manipulation > that would generate code for injecting the needed dependencies from the > registry... or more precisly assign the generated proxies. But then i have > > this chicken-egg dilemma: how can i use and reference a registry that does > > not exist yet. > > i think i'm going to try creating a class that holds a static reference to > > the registry and use it to generate the proxies... if it doesn't work i'll > make all constructors private or package private so nobody else > except the factories can instantiate them :) > > as pointed out by jeffrey i could also pass in the services as needed > but i think this approach will bloat the methods of my domain objects. > have you used this approach on a big codebase? doesn't it have some > negative effects on the expressiveness of the Domain Objects? > > g, > kris > > -----"Filip S. Adamsen" <[EMAIL PROTECTED]> schrieb: ----- > > An: Tapestry users <users@tapestry.apache.org> > Von: "Filip S. Adamsen" <[EMAIL PROTECTED]> > Datum: 10.12.2007 09:08PM > Thema: Re: [T5] injecting services into Domain Objects > > > > I meant domain class, sorry. > > Filip S. Adamsen skrev: > > Oh, I wasn't talking about sticking it in a class. That'd be... ugh. No. > > > > I meant to have some class, presumably a singleton, hold the Registry. > > But certainly not a domain object. Never. Ever. > > > > -Filip > > > > Paul Cooley skrev: > >> It's better to have a simple singleton factory to contain the registry. > >> Plus if you were crazy enough to put it into a domain object as a > >> reference > >> (or any service reference) you need to make sure it's marked as > >> transient so > >> it will be ignored when serialization occurs for the domain object. > >> > >> On Dec 10, 2007 1:40 PM, Filip S. Adamsen <[EMAIL PROTECTED]> wrote: > >> > >>> Well, having a Registry instance in some class is what you would do if > >>> you were to run Tapestry 5 IoC as part of a non-web application. > >>> > >>> I guess you could subclass TapestryFilter and override the init method > >>> to get a hold of the Registry for retrieval through a static getter, > >>> although I'm not sure how clean that is and what, if any, the > >>> ramifications would be. > >>> > >>> -Filip > >>> > >>> jeffrey ai skrev: > >>>>> is it possible to use tapestry-ioc to inject services into domain > >>> objects? > >>>> First, I don't think it's good practice to inject services into > domain > >>>> objects. If some operation of domain object really needs to use a > >>> service, > >>>> you could pass a service instance to that specific method instead of > >>>> injecting it. > >>>> To my understanding, Tapestry dependency injection is mainly for > >>> services. > >>>> You could inject a dependency as a parameter of the service builder > >>> method, > >>>> or as a parameter of the service implementation's constructor(for > >>> autobuilt > >>>> services), or as a parameter of the module builder's constructor. > >>>> > >>>>> when using (build-time) AOP i need a reference to the registry, but > >>>>> how > >>> do > >>>>> i get it? > >>>> The default Tapestry application registry is created in > TapestryFilter, > >>> and > >>>> I don't see it's published out. > >>>> You could of course create your own registry using RegistryBuilder > and > >>>> publish it somehow, but I don't think that's a good practice to have > a > >>>> registry in your class and retrieve services from it. > >>>> > >>>> Cheers, > >>>> Jeffrey Ai > >>>> > >>>> > >>>> kristian.marinkovic wrote: > >>>>> hi all, > >>>>> > >>>>> is it possible to use tapestry-ioc to inject services into domain > >>>>> objects? i'm thinking of something like @Configurable in spring. > >>>>> > >>>>> when using (build-time) AOP i need a reference to the registry, > >>>>> but how do i get it? preferably i'd assign the generated proxy > >>>>> to the fields. > >>>>> > >>>>> i'd appreciate any suggestions! > >>>>> > >>>>> g, > >>>>> kris > >>>>> > >>>>> example code: > >>>>> public class Order { > >>>>> @Inject Repository repository; > >>>>> @Inject Notification notification; > >>>>> } > >>>>> > >>>>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>> For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >> > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To > unsubscribe, e-mail: [EMAIL PROTECTED] For additional > commands, e-mail: [EMAIL PROTECTED] -- Gotta find my destiny, before it gets too late.-- Ian Curtis