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]