[Lift] RFC: Restructuring Lift Codebase [Round 2]

2009-10-02 Thread Indrajit Raychaudhuri

Folks,

Following up from the previous round, I am summarizing what we
discussed so far with an attempt to converge and move on to impl.
Would be keen to have feedback and possibly arrive at some resolution
on the outstanding items. (Meaty stuff below the module structure)


liftweb

- lift-core [H]
  - lift-base [J]
  - lift-util [J]
  - lift-actor
  - lift-json
  - lift-webkit [K]

- lift-persistence
  - lift-mapper
  - lift-record
  - lift-jpa

- lift-modules [L]
  - lift-testkit
  - lift-osgi
  - lift-wizard
  - lift-widgets
  - lift-machine
  - lift-textile
  - lift-facebook
  - lift-amqp
  - lift-xmpp
  - lift-openid
  - lift-oauth
  - lift-paypal
  - lift-jta

- lift-archetypes
  - ...

- lift-examples [M]
  - ...

- lift-site

- lift-resources [N]
  - lift-root-model
  - lift-site-skin
  - lift-installer
  - misc config resources (scaladoc, javadoc etc.)

Resolved since:

[A] lift-* prefix is fine/preferred for top level categories (dir_name
== artifactId) [Heiko]

[B] For Lift users not using Maven these *-all.jars will be valuable.
Assembly preferred to meta [Heiko]

[C] lift-testkit to move to lift-modules. Applications would use it
under 'test' scope. [David]

[D] lift-json to be part of core [Marius]

[E] lift-persistence being separated from lift-core into it's own
category and made optional [Marius]

[F] No deep nesting within modules (no submodules) for now [Heiko]

[G] Presentations and docs to be in central repository for now
[+1:David/Tim/Derek, +0:Indrajit, -1:Heiko/Viktor].
Settling for central repo at the moment (a: least change, b: in a
hurry to converge, c: effect of living in largest democracy in the
world!).  Later on, I'll attempt to make this part of site build and
make them more conveniently available.


Outstanding since:

[H] lift-core has to get a better and more appropriate name (and also
to avoid confusion since lift-core == 'everything lift' at the
moment).
Starting with two that come to my mind.
- lift-lite (Members of this category make up the lightweight,
minimalistic Lift distribution that would help you build a Lift based
application)
- lift-genesis (Members of this category make up the genesis of
your Lift based application)
- lift-mini (Minimal Lift distribution to get started with Lift)
- lift-minimal (Same as above)

[J] lift-base, lift-util needs more unambiguous names.
- lift-base -> lift-common [+1:Naftoli/Derek/Stuart/Marius/Tim/
Heiko/Viktor, +0:Indrajit -1:DavidB (very strong)] But still good to
have even better option.
- lift-util -> lift-util (no change) [+1:Marius/David (status
quo)]
- lift-util -> lift-webutil [+1:Naftoli/Derek/Stuart/Indrajit/Tim/
Heiko/Viktor]

[K] Splitting webkit, over dependence on webkit etc. Different options
have been discussed actively.
An possibility could be:
- lift-webkit as top level category (and concrete modules within)
- put the 'core' parts of webkit in the new lift-webutils (see
above) and non-core parts (Ajax, CSS etc.) in lift-webkit
- lift-widget, lift-wizard etc. can be folded into the non-core
part of lift-webkit

Having said them,  Let the thoughts brew for sometime. I'm keeping
this "as is" for now. Would come back after I clean up my plate a
bit ;-)

[L] As stated earlier, I am putting 'everything else' here for lack of
better place. I have concern that this can turn out to be a place for
all the 'nowhere else to go' modules. But let's sleep on it till the
problem is big enough ;-)

[M] The example project names need to be rationalized, normalized.
examples/example doesn't qualify ;-)

[N] lift-resources should have meaningful name.
For start:
- lift-infra
- lift-infrastructure
- lift-project-resources
- lift-varia

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~--~~~~--~~--~--~---



[Lift] RFC: Restructuring Lift Codebase

2009-09-27 Thread Indrajit Raychaudhuri

Folks,

As followup to the proposed goal of "Keeping lift-core neat and
small", here is the first iteration of the revised structure of Lift
codebase.


liftweb

- lift-core [10]
  - lift-base [02]
  - lift-actor
  - lift-util
  - lift-json [03]
  - lift-webkit [04]
  - lift-testkit [05]

- lift-persistence [06]
  - lift-mapper
  - lift-record
  - lift-jpa

- lift-modules [07]
  - lift-osgi
  - lift-wizard [08]
  - lift-widgets [09]
  - lift-machine
  - lift-textile
  - lift-facebook
  - lift-amqp
  - lift-xmpp
  - lift-openid
  - lift-oauth
  - lift-paypal
  - lift-jta

- lift-archetypes
  - ...

- lift-examples
  - ...

- lift-site [10]

- lift-resources [lift-varia, lift-infra ?] [11]
  - lift-root-model [12]
  - lift-site-skin
  - lift-installer
  - misc config resources (scaladoc, javadoc etc.)

General notes (including some obvious ones):

[A] lift-* prefix looks superfluous, but it's best to have one for all
artifacts that generate jar (jar). Also Maven
reactor feels happier when artifactId == directory_name (site
generation, scm extrapolation etc., situation might have improved
now).

[B] The top level project categories (lift-core, lift-persistence,
lift-modules etc.) are simple multi-module models at the moment and
not meant to create anything other than pom. Therefore, lift-* prefix
can go away. But they'll have to come back if we plan to generate 'one
jar' in assembly mode per category (lift-core-all.jar, lift-
persistence-all.jar etc.). This could be useful for 'get me
everything, I don't care about size' people. But is it necessary? The
alternative is to have empty 'meta modules' that pull up the necessary
dependencies and can be included by the users in their project (quite
similar to what lift-core does now).

[C] The members in a project category (lift-mapper, lift-record etc.)
would inherit the category model (lift-persistence in case of lift-
mapper, lift-record). Related modules clubbed together helps similar
configuration pulled up to the parent pom (improves DRY-ness). Added
benefit: modules can be developed even outside Lift codebase with the
given parent pom (available in global repo) and the developer won't
have to worry about most of the infra related boilerplate
configurations (couple of config still would need change though).

[D] Presentations and other materials aren't really source code for
inclusion in source repository. Can this go in wiki? (immediate
problem: github doesn't take attachment). Has this been discussed
earlier? They can go as a separate github project too.

[E] The categorization is mostly based on my interpretation as a late
entrant. If there is a different structure that fits the philosophy
better (quite likely), this would get regrouped. (Tim ?)

[F] The modules in a category can be further sub-grouped, but with
caution. Basically, need the right mix between 'flat'-ness and deep
nesting. Thoughts on this?

[G] Each category can eventually be split up into separate projects
and have their own release schedules (less frequent for core, more
frequent for modules etc.). This might be little overkill at the
moment. Just mentioned to enable us mind the long term perspective :)

[H] Other points on the draft hierarchy (see the # in brackets above):

[01] With these members, if lift-core doesn't sound as the right name,
we need the right name. Provided the grouping is right that is.

[02] Base interfaces for Lift (currently present in dpp_wip_actorized)

[03] Doesn't really have to be part of Lift core in current form, but
this is eventually meant to be part of Lift's JS infrastructure (thus
kept here at the moment)

[04] Candidate for decomposition. But kept intact at the moment. Would
be taken up in next pass once the top level reaches steady state. This
could either become a category of its own or a module with submodules.

[05] Little unsure about it's intent and purpose, I could be
completely mis-interpreting this. Thoughts from somebody with more
understanding please :)

[06] Doesn't have to be part of lift-core. Lift applications not using
persistence doesn't have to need this.

[07] Extra stuff, necessary iff one needs. Right now, I am putting
'everything else' here for lack of better place, but I see a scaling
up issue there. This can turn out to be a place for all the 'nowhere
else to go' modules. But we can take it up in next pass. Suggestions?

[08][09] See #04 above. Can be subpackage of lift-webkit eventually

[10] The website! The intent is to bring liftweb.net codebase into the
streamlines structure. Can be deferred if this is not a burning need.

[11] Recommendation for a good name?

[12] The top level pom for Lift project. All models (the categories)
are expected to inherit this. These categories doesn't necessarily
have to belong to the same git repo.


Let the discussion/debate begin!

Cheers, Indrajit

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.