Hi all,

When discussing the namespace decision of today's IRC meeting, we
realized that we can't make such a decision before having a clear
picture of how to organize the Symfony2 universe (everything under the
Symfony\ vendor namespace).

So, here goes the RFC. You can find the original here:
https://gist.github.com/832486 Please bear with my wording, I'm not
good at formulating things. I'm looking forward to hear your comments
or adaptions to make this RFC happen.

Organization of projects in the Symfony2 universe
=================================================

Definitions
-----------
"Project": A project is a collection of code maintained by specific persons.

Namespacing
-----------
Every project in the Symfony2 universe has a namespace under Symfony\.
We call this namespace the project-level namespace.

Example:

Symfony\Twig
Symfony\Templating
Symfony\Validator

Bundles are special projects that reside in sub-namespaces
Symfony\Framework or Symfony\CMF, because they share a common
architecture (controllers, DI config etc.) and require a specific
application structure. Bundles under Symfony\CMF are maintained by a
separate group of committers and built on top of Symfony\Framework.

Symfony\Framework\SecurityBundle
Symfony\CMF\XxxxBundle

Important: No project must ever write into project-level namespaces
except his own! For example, the Validator project must never define
classes in Symfony\Templating.

Currently, there'd be 23 project-level namespaces under the Symfony
vendor namespace (21 components, Framework, CMF). The expected number
in the future is around 40, hosted in various GitHub repositories.

Dependencies
------------
Projects can have weak (optional) and strong (required) dependencies.
Projects can also be completely independent.

Examples (independent):

Symfony\Twig
Symfony\Validator

Examples (dependencies):

Symfony\Framework\FrameworkBundle -> Symfony\HttpFoundation, ...
Symfony\CMF -> Symfony\Framework

Repositories
------------
All projects CAN (not must) be hosted in different GitHub repositories
and maintained by different people.

The directory structure can be organized like the Doctrine2
repositories and like the current Symfony2 repository: Each repository
has a top-level "src" (or "lib") folder and a top-level "tests"
folder.

Versioning
----------
Projects have independent versioning. So we can talk about Twig v2.0,
Validator v2.5, CMF v1.0 etc. Because bundles are very likely to have
their own release cycles, they have independent versioning as well,
for example SecurityBundle v2.5, FrameworkBundle v2.1 etc.

A Symfony Framework release is a combination of specific versions of
its bundles and required projects.

Package management
------------------
Once we have automated package management, each project, along with
its version and dependency definitions, can be delivered in an
installable package.

Pros and Cons:

+ clear separation of projects and responsibilities
+ logical structure for people unrelated to Symfony

- BC break, but can be fixed in an automated fashion by recursively
renaming all namespaces

This proposal is supported by:

* bschussek
* avalanche123
* Seldaek
* johanness
* pgodel
* henrikbjorn
* jmikola
* lsmith
* jonwage
* naderman

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en

Reply via email to