+1 to the new PM style.

在 2010-03-12五的 13:55 -0700,David E Jones写道:
> Hello all,
> 
> First, I apologize in advance for the somewhat off-topic post.
> 
> A few people, but not many, already know that I've been working on a new 
> enterprise application framework over the past couple of months. That 
> framework is not starting to take shape and is called Moqui. You can see the 
> Moqui project on sourceforge, and eventually I'll get the moqui.org web site 
> setup as well (but it isn't yet, just a parked domain for now).
> 
> I've been waiting to make it more public until I had designs in place for 
> most of the main ideas, and that is now done. The designs and planning are 
> not yet complete, but are far enough along (and with an example application) 
> that it is at least clear what the framework will be like in a fair amount of 
> detail.
> 
> How does this relate to the Apache OFBiz Framework? Why am I doing this as a 
> separate project instead of part of OFBiz?
> 
> I guess as Ricky Ricardo used to say, I've "got some 'splainin' to do!" I'll 
> try to keep it short and simple... but then again you probably know my track 
> record on that. ;)
> 
> Early in the life of OFBiz there were various points in time where we made 
> dramatic changes to the framework. This was somewhat painful even when the 
> project was small, and you can still see the results of that in OFBiz today 
> with some older code that does not take advantage of newer tools. It may be 
> that part of the problem was that the framework and the applications work 
> together in a single project and while the dividing line between them was 
> fairly clear for a long time it has become harder and harder to say what is 
> really in the framework and what is really in the applications and to keep 
> things in the framework from depending on the applications. If the framework 
> had been in a separate project the applications could have been built on a 
> certain version of the framework, released before updating to a newer version 
> of the framework, and then refactored or rebuilt to use the newer version of 
> the framework.
> 
> On the other hand, over time as the applications have grown and the number of 
> organizations using OFBiz have grown, it has become much more difficult to 
> make major changes in the framework because there is so much code that would 
> have to be updated and there are so many people using the code that would 
> have problems because of the updates. In many parts of OFBiz there is 
> backwards compatible code and I think it is impressive that so much backwards 
> compatibility has been maintained. This does have the downside of making the 
> framework, and especially the implementation of the framework, far more 
> complex.
> 
> Over the years I've thought about many possible changes to the framework and 
> kept notes on them. There have been a few times when I focused on framework 
> improvements, and for a while after OFBiz joined the Apache Software 
> Foundation I even tried to push a temporary focus on the framework before the 
> size and scope of the applications increased too much more. A lot of great 
> things have been added to the framework in recent years in spite of all of 
> the difficulties and it has been impressive to see the community take up and 
> leverage so many of these changes.
> 
> A few months ago I started thinking about another set of changes and looking 
> at how they might be implemented inside OFBiz. Eventually I decided that the 
> changes were too dramatic and it would be much easier to just do them as a 
> separate project. What I have started is a separate open source project that 
> is not part of the Apache Software Foundation. It may take quite a while to 
> get this implemented even to the 1.0 release, and when that happens I hope 
> that either Apache OFBiz will move to use it or another project like OFBiz 
> will be built on it. For now I'm not really worried about that and the focus 
> of the effort is to build a good framework and nothing more. The license of 
> the framework is the Apache License 2.0.
> 
> With the Moqui framework I am also planning to structure the community 
> differently. There are many great things about a more open community driven 
> project like OFBiz. For example, it is a great place for innovation and new 
> ideas and collaboration with others to make those new ideas a reality. For me 
> personally I plan to stay involved with OFBiz and for the foreseeable future 
> it is still the main focus of my career. This may seem funny because I have 
> been hostile in the past with OFBiz to the idea of having more restricted 
> control over commits to the trunk, and I certainly haven't jumped on the GIT 
> bandwagon at all. That doesn't mean I don't think it's a good idea in 
> general, I'm just not sure how it would work for something like OFBiz or for 
> any project in the ASF. 
> 
> However, with this new project I am planning on managing it more like Linux 
> and various other open-source projects are managed. The idea is for 
> everything to go through a single moderator. Contributions from others may be 
> accepted, but never directly and only through the moderator. The project may 
> have multiple moderators each responsible for a different part of the whole, 
> but nothing will go into the project without centralized review. This sort of 
> model does bring up other possible issues but for this sort of software the 
> trade-off is well worth it.
> 
> Yesterday I spent some time writing up an overview of the Moqui project and 
> also a comparison of the Moqui framework to the OFBiz framework. For those 
> interested I am including both below.
> 
> Out of courtesy for the real intent of this mailing list if you have 
> questions or comments about Moqui please send them to the Moqui Open 
> Discussion Forum instead of sending them to an OFBiz mailing list. This 
> thread on this mailing list will hopefully only have a single message so that 
> the list can focus on what it is meant to.
> 
> -David
> 
> 
> =============================================================================
> The Moqui Framework
> =============================================================================
> 
> The Moqui Framework is an integrated tool set with everything needed to start
> building web-based applications right away. Instead of starting with a set of
> tools and figuring out how to use them together and filling in gaps that are
> not handled by default Moqui is ready to go right away.
> 
> The Moqui Framework includes:
> 
> - Database (entity) proxy for data tier
>   - Define your entities and go, no code to write and no redundancy
>   - Java API or XML tags for a wide variety of queries and common operations
>   - Event-Condition-Action rules to do things based on data changes
>   - Data import and export tools, including for seed and other setup data
>   - Support for Derby, HSQL, PostgreSQL, MySQL, and Oracle OOTB, and easy to
>     add support for other databases, usually just through configuration
> - Service-based logic tier
>   - Call services synchronously, async, or scheduled
>   - Services can be local or remote and implemented in a variety of languages
>   - Flexible XML service definitions
>   - Validation of data type, required or not, regexp, and other constraints;
>     validation runs on server and in client with JavaScript library
>   - Event-Condition-Action rules to orchestrate high level processes,
>     externally change or augment behavior of existing services, and much more
> - Screen-base user interface tier
>   - Declarative multi-platform screens, text templates, or any combination
>   - Generate HTML, XML, PDF (XSL-FO), or drive GWT or Swing screens
>   - Screen files and included sets of subscreens in directories with the same
>     structure as the application
>   - Nested subscreens for multiple levels of tabs or other types of menus
>   - Data preparation logic declared with screens to make each screen modular
>   - Outgoing transitions point to input processing logic and conditional
>     forwarding to other screens or external URLs
>   - Forms (single, list), trees, panels, and various other common widgets
> - Uses Groovy for scripting and Freemarker for templates (can add others)
> - JCR 2.0 (JSR-283) based content and artifact management
> - Manage incoming and outgoing email
> - Implicit internationalization and easy localization
> - Comprehensive security with declarative authorization
>   - Settings in the database, separate from implementation artifacts
>   - Define run-time inheritable permissions for any artifact in the system
>   - Both record level and implementation artifact level security
> - Protection from XSS and XSRF threats (uses ESAPI and Antisamy)
> - Flexible resource access from files, JCR repository, and many others
> - Cache management for framework and application resources
> - Logging
> - Multi-tenant architecture (single application, one database per tenant)
> - Common business data structures and seed data
>   - Enumerations and statuses with transitions
>   - Units of measure with conversion, including currency
>   - Geographic boundaries (legal and arbitrary) and points
>   - Time periods and temporal expressions
> - Service/logic and data level integration options
> - Data migration and mapping tools (especially for to/from XML, to/from db)
> 
> The framework features a well-defined Java API that makes it easy to get at
> the features listed above, especially in Groovy code. What's even better is
> that the Moqui tools are designed to be used in a declarative way so most of
> what you need to do will be possible with XML configuration and little or no
> code is required, unless you want to of course.
> 
> Moqui uses sourceforge.net for various tools. See the Moqui sourceforge site
> here:
> 
> http://sourceforge.net/projects/moqui/
> 
> To access to the source for Moqui through SVN use this URL:
> 
> https://moqui.svn.sourceforge.net/svnroot/moqui/trunk/moqui
> 
> =============================================================================
> The Moqui Framework versus the the Apache OFBiz Framework
> =============================================================================
> 
> -- ControlServlet, widgets (screen, form, menu, tree):
> 
> These tools are now all combined into the XML Screens.
> 
> There are no explicit menus and instead there are subscreens and a menu is
> automatically generated from the set of subscreens in a screen.
> 
> Instead of using the decoration pattern the XML Screens use subscreens to
> compose an hierarchy of screens. The subscreens for a screen can be
> configured in three different ways for different purposes including: a
> directory structure plus defaults for a normal screen/subscreens hierarchy,
> an XML element to include screens from other applications or that aren't in
> any application, and a database table that allows add-on component to add
> a subscreen to an existing screen somewhere else.
> 
> It is not an option to have multiple XML Screens in a single file. Each file
> represents a single screen to make it easier to see what an application looks
> like just by browsing the directory structure, kind of like it is for webapps
> with normal templates and such.
> 
> Forms and trees are kept in separate files and are simply in-lined
> in a screen. It is possible to refer to forms externally using the
> screen's file location and the name of the form.
> 
> The widgets don't have any style attributes that will be used for HTML
> class attributes. There are id attributes in various places, but the intent
> is to use automatic id and class elements based on names and types of
> elements in the XML Screens and then keep all of the styling in an external
> CSS file.
> 
> There aren't any AJAX- and HTML-specific elements and attributes. This
> goes back to the original intent of the OFBiz widgets and that is to be purely
> declarative and platform independent. Many XML Screens elements will be
> implemented using AJAX and DHTML, and options to control those or add to them
> will be available.
> 
> -- MiniLang simple-methods, screen/form/etc actions
> 
> All operations from these various places are combined in one XSD file
> and are referred to as XML Actions. These are included in various places
> using the "actions" and "condition" elements. With this approach there is no
> inconsistency for similarly named and designed operations or conditions.
> 
> Moqui XML Actions don't have operations that are not frequently used and some
> operations are like a combination of various simple-method operations. There
> are operations for a few additional things as well, like producing and
> consuming XML.
> 
> Some operations that are inconsistent in different places in OFBiz, like
> calling a service, have all similar features combined into one far more useful
> operation.
> 
> There is no performFind service needed in Moqui as the entity-find operation
> has an element that takes its place, and can be combined with various other
> elements of a find by condition for a great deal of flexibility that is
> easily usable.
> 
> The actions are available in many more places including ECA rules, screen
> transitions (like the OFBiz controller request events), and others.
> 
> -- Service definitions and implementations
> 
> The OFBiz Service Engine is most like the Service Facade in Moqui. There are
> many other facades, and for more info see the API Structure section below.
> 
> Service names are split into verb and noun parts, which together make up the
> service name (ie like: ${verb}${noun}). Services are called with the combined
> name and can separate the verb and noun parts of it using a hash mark ('#').
> 
> Service parameters in Moqui are like the service attributes in OFBiz.
> 
> Service parameters are split into two groups: "in-parameters" and
> "out-parameters" so that parameters with the same name can have different
> settings going into or coming out of the service.
> 
> Parameters in Moqui have hierarchical sub-types for map and collection types.
> 
> Parameters have a fairly complete set of validation tags. Those
> validation tags will be used for server-side validation when the service is
> called, AND when the service is a target on a screen transition it will be
> used to generate client-side validation in JavaScript. This validation
> is defined once but run in both places.
> 
> As mentioned above XML Actions are available in many places, and one of those
> places is inside a service definition. With this a service implementation can
> be inline inside the service definition or external depending on preference.
> 
> -- Entity engine
> 
> The OFBiz Entity Engine is most like the Entity Facade in Moqui. There are
> many other facades, and for more info see the API Structure section below.
> 
> Entity definitions are more streamlined and don't have the less useful
> attributes and elements. Primary key fields are designated with an attribute
> on the field element instead of using a separate element. The data type
> dictionary in Moqui is more simple and better organized than in OFBiz and
> the data types available are declared in the XSD for auto-completion help.
> 
> The API for dealing with entity values and for queries and such is much more
> simple, streamlined, and in a few small cases has additional functionality.
> The methods have far more consistent names than in OFBiz, using
> create/update/delete everywhere instead of things like store or remove.
> 
> Moqui does not have a concept of multiple delegators so the Entity Proxy 
> configuration file is much more simple. The datasource elements are also far
> more simple because all of the database-specific settings are now in the
> database configuration file along with the data type dictionary (combined in
> one file instead of a separate file for each database).
> 
> -- API structure
> 
> The Moqui API is clearly separate into interfaces and implementations of
> those interfaces. Applications only need to worry about the interfaces part
> of the Java code and not the underlying implementation.
> 
> All tools in the Moqui framework are available through the ExecutionContext
> object, which is created and attached to a thread for each web request,
> remotely called service, etc. It keeps the current context for whatever is
> running and has a series of facades for each tool in the framework, including
> for sevices, entities, screens, localization, logging, caching, user info
> and preferences, and so on. Some of the implementations of these interfaces
> will be reusable from one thread to another, and others will be created for
> each thread.
> 
> The API is designed to take advantage of some of the syntax short cuts in
> Groovy such as using the dot syntax to start with the Moqui static object and
> get down to whatever part of the API you need.
> 
> -- Configuration and code layout
> 
> In Moqui the framework is one big happy set of tools that works together.
> There is no attempt to separate the tools or make them useful on their own.
> That was goal at first with OFBiz, but never really worked out very well and
> splitting the framework into components caused more difficulty than it helped
> things. So, in Moqui it's all one big framework, and one that can be easily
> compiled and deployed and so on. The basic idea is that the framework jar
> files (api and implementation) on the classpath plus the locaiton of the
> runtime directory are all you need to get started. Components can be loaded
> through an API or configuration.
> 
> Configuration files are meant to come from a runtime directory and are not
> spread around the code. There is a default-conf directory in the framework
> so that if a configuration file is left out the framework will have a default
> to fallback on that will work in most cases.
> 
> While Moqui supports multiple webapps, the normal deployment mode will be as
> a single big webapp with screen trees from add on components mounted on a
> certain path within the big webapp.
> 
> -- Content management
> 
> Instead of a set of entities and services for content management that are
> part of the project Moqui uses the JCR 2.0 interfaces (and by default the
> Apache Jackrabbit implementation) for content management. Anywhere there is
> a "location" in the API or XML files it can have a prefix of "content://" to
> access something from the JCR. This means that code and templates and such
> can go there as well.
> 
> -- Security: authorization
> 
> Moqui uses a set of entities to define user groups, artifact groups, and
> permissions for a group of users on a group of artifacts. These are external
> settings and support record level permissions too. With this approach there
> is no need make the artifacts responsible for permission checking, and no
> code changes are required to change permissions when customizing or
> maintaining or supporting an application.
> 
> There is a tarpit concept in OFBiz that uses the same model as the
> permissions for reduced redundancy and more features.
> 
> -- I18n and L10n
> 
> Internationalization is implicit everywhere in Moqui using natural text in
> the default language for a key instead of an artificial identifier. This
> reduces redundancy and effort. The localized labels are in a database table
> instead of an XML file to perform better (only lookup and cache labels that
> are used) and to support per-tenant localizations in a multi-tenant
> environment.
> 
> 
> 
> 
> 

Reply via email to