tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alessio Gambi <alessioga...@gmail.com>
Subject Re: Gathering some knowledge about T5
Date Tue, 04 Dec 2012 16:29:39 GMT
Yep, that could be a nice motivating example.

But I am still stuck on automatically extracting the object instances (or a copy of them)
used as configurations for a given service.

Any other interesting case study other than "Symbols" is also welcome.



On Dec 3, 2012, at 8:13 PM, Howard Lewis Ship wrote:

> More introspection inside InternalRegistryImpl could be useful for handling
> some awkward edge cases, such as preventing recursion when a decorator
> service is accidentally employed to decorate itself.
> 
> 
> On Sun, Dec 2, 2012 at 7:53 AM, Alessio Gambi <alessiogambi@gmail.com>wrote:
> 
>> Hi,
>> 
>> no rush.
>> 
>> At the moment, I am going deeper inside the IoC modules to see where the
>> data I would like to extract are.
>> 
>> My solution at the moment is to patch RegistryImpl to persist some
>> interesting data about services, modules, configurations and their
>> inter-relation.
>> It's a brute force approach that does not taste good, but at the moment is
>> the simplest to implement (or at least it seams to be so).
>> 
>> Moreover, the tapestry Lazy approach to service instantiation, which is
>> perfect for performant production app and short startup application time,
>> for my case study is tricky, as I need to forcefully instantiate all the
>> services
>> in order to get their "actual" configurations.
>> 
>> Right now I miss only two pieces in my puzzle: How can I get the actual
>> configured objects for a given service (identified by serviceID) ?
>>        Registry has getOrder/getUnord/getMapp Configuration methods but I
>> totally miss the way I can invoke them in a clean way.
>>        I prefer to avoid String matching on ServiceDef3 objects to link
>> Map-Mapped, List-Ordered, Collection-Unordered.
>>        It is also not clear to me how can I provide the second parameter
>> to the get*Configuration method (the "GenericType").
>> 
>> 
>> As a case study, I am working on "Symbols". I am trying to answer
>> questions like the following ones:
>> 
>> - What is the complete list of symbols available in the application ?
>> 
>> - What values do they have ? What type is contributed  ?
>> 
>> - Where are they contributed ?
>> 
>> - Where are they overwritten ?
>> 
>> - Where a given symbol is used/injected ?
>> 
>> - What SymbolProviders are contributed ? In what order (using ordering
>> constraints) ? Is there a conflict somewhere (like two services contributed
>> with before:* ?)
>> 
>> - ...
>> 
>> -- Alessio
>> 
>> 
>> On Nov 30, 2012, at 12:02 AM, Howard Lewis Ship wrote:
>> 
>>> I hope to respond to your post soon; quite busy with multiple clients
>> right
>>> now.
>>> 
>>> I know in the past I have made specific decisions to simplify manual
>>> coding, even though it made IDE support more complex.
>>> 
>>> In addition, I think some features I've introduced made certain edge
>> cases
>>> of Tapestry more "concise", but not necessarily better (*) and probably
>>> harder to support in an IDE.
>>> 
>>> (*) What I've found is that some of the very concise features made it
>> much
>>> more complicated to explain what Tapestry is doing at any point in time.
>>> Everything becomes a checklist.
>>> 
>>> 
>>> On Thu, Nov 22, 2012 at 7:37 AM, Alessio Gambi <agambi81@gmail.com>
>> wrote:
>>> 
>>>> Gentlemen,
>>>> 
>>>> my name is Alessio Gambi, I have a PhD in Informatics from the
>> University
>>>> of Lugano (Switzerland), a M.Sc. from the Politecnico of Milan (Italy)
>> and
>>>> another M.Sc. form the University of Illinois at Chicago (USA).
>>>> 
>>>> As you guessed, I am also a huge fan of T5; therefore, I would like to
>>>> contribute to the community.
>>>> 
>>>> Differently from many of you, I do not want (at least for the moment :)
>> )
>>>> became an active developer *of* the framework itself.
>>>> And I plan to contribute by developing, or better, formalizing high
>> level
>>>> knowledge about development of T5 applications, and also by developing
>> tools
>>>> that support the programmers and the other actors involved in this (fun)
>>>> process of making T5-based applications.
>>>> 
>>>> I go straight to the point so I do not take much of your time.
>>>> 
>>>> Goals
>>>> 
>>>> Goal n1
>>>> Define a methodology that is tailored on and specific to Tapestry5. The
>>>> framework offers a great deal of functionalities and features that must
>> be
>>>> used at the right time, for precise purposes, and in the intended way.
>>>> In other words, develop according to the T5 way of doing things, while
>>>> avoiding as much as possible "The Hard Way"®
>>>> 
>>>> Goal n2
>>>> Design and implement as set of tools that support such a specific
>>>> development process. Here, I am talking about means to improve the
>> quality
>>>> of the design, not to ease the implementation by automate activities,
>> and
>>>> not
>>>> to reduce the time to produce code.
>>>> 
>>>> 
>>>> Some motivating examples just to stimulate further discussion:
>>>> 
>>>>       Example: You are just arrived in a company where they have plenty
>>>> of T5 modules (aka Library and Application Modules) and you are asked to
>>>> find or define the best datatype (hint: this is a keyword) to use in a
>>>> brand new requirement.
>>>>                       How do you proceed? Note: You do not have access
>>>> to the code of such modules.
>>>> 
>>>> 
>>>>       Example: You are given an Library Module that was developed by a
>>>> colleague that left the company, the module is 1K LOC and makes a lot
>>>> (hint: A LOT) of contributions, service definitions, customizations.
>>>>                       Your boss asks you to explain how that module
>> fits
>>>> in the main application.  How do proceed ? Note: some services override
>> T5
>>>> default behavior, there are ClassTransformationWorkers-here and there.
>>>> 
>>>> 
>>>> How can you help ?
>>>> 
>>>> Do not blow up the dev-list with flames-like mail... contact me in
>>>> private, unless you feel it is better to share your thoughts/experiences
>>>> with the dev community.
>>>> 
>>>> 
>>>> For Goal 1 I need stories (as sort as possible, but not shorter !) that
>>>> tells me your experiences as developers of T5 applications, and as
>>>> developers of the framework itself.
>>>> Dev apps with T5:
>>>>       - How do you usually organize your work ? Agile vs Waterfall ?
>>>>       - How do you plan pages/components/services?
>>>>       - Do you evolve your code? I start by putting everything in a
>>>> page, then I realize there's a change for a component, then I evolve the
>>>> component by adding some AJAX, ...
>>>>       - Do you adopt some specific pattern ? I like to define a
>>>> Service*Source that will create instances of * because then I can
>>>> contribute to that **
>>>>       - How do you approach the integration with other frameworks ?
>>>>       - Common Use Case and Scenarios?
>>>>       - ...
>>>> 
>>>> Dev T5 itself:
>>>>       - I am interesting to understand your
>>>> motivations/assumptions/requirements about the different features of the
>>>> framework that you developed somehow.
>>>>       - Can you list if there are new roles that developers cover with
>>>> T5 ? Tester -> Page tester, component tester, service tester, service
>>>> integration tester ? Component development ? Datatype designer ?
>> Validator
>>>> designer ?
>>>>       - ...
>>>> 
>>>> Do not be shy, I will not just you, and I do not assume that everything
>>>> MUST be in favor of Tapestry... I would like also to see also
>> weaknesses
>>>> of T5 and its limitations.
>>>> 
>>>> For Goal 2 I need requirements and helps with the code.
>>>> Requirements:
>>>>       - What king of activity of you process do you like to be
>> supported
>>>> ? Any suggestions on how you plan to do that ?
>>>> 
>>>> Help with the code:
>>>>       - The first step is to extract the info from the framework
>> itself.
>>>> How do you do that without patching or touching core, internals and ioc
>> ?
>>>>       Simple example: How can I recover the configuration of a service
>>>> after everything is initialized ?
>>>> 
>>>>       - The second step is in organize the information. Are these info
>>>> about validation? Are that related to TypeCoercion ?
>> BeanEditing/Displaying
>>>> ?
>>>>       BTW: what are the main area of knowledge that you can identify in
>>>> Tapestry ? Services, Data, DataTransformation, Pages, Navigation,
>>>> Components?
>>>> 
>>>> 
>>>> 
>>>> If I can get enough things I plan to start writing down and disseminate.
>>>> If you like to contribute we can setup a mini-task-force. If you like to
>>>> review and comments on the various
>>>> outcome that is fine anyway.
>>>> 
>>>> 
>>>> 
>>>> Cheers
>>>> 
>>>> -- Alessio
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Howard M. Lewis Ship
>>> 
>>> Creator of Apache Tapestry
>>> 
>>> The source for Tapestry training, mentoring and support. Contact me to
>>> learn how I can get you up and productive in Tapestry fast!
>>> 
>>> (971) 678-5210
>>> http://howardlewisship.com
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>> 
>> 
> 
> 
> -- 
> Howard M. Lewis Ship
> 
> Creator of Apache Tapestry
> 
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
> 
> (971) 678-5210
> http://howardlewisship.com


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message