Thoughts: On Orchard CMS 2.0

Orchard CMS has a very spirited team, they keep trying to catch up with the latest trends, the first version of Orchard CMS was a very successful start, it was built on a strong foundation, which aims to achieve the goals of MVC architecture, and with the second version (until now, it is in Pre-Alpha stage), they applied a lot of learned lessons from previous version, to up the product to another level of dynamicity and efficiency.

If you try to experiment the current Pre-Alpha of Orchard CMS 2.0, you will notice that the main focus in this version is on two aspects, architecture (Decoupling and Abstraction) and performance (Database Structure), and this is what we will briefly talk about in this post (will be explained deeper in the upcoming posts).

Decoupling and Abstraction

The main purpose of MVC architecture is to boost the decoupling of the system components (isolates the application logic from the user interface layer and supports separation of concerns), ASP.NET is one of the best implementations of this architecture, and ASP.NET Core 1.0 is a huge step in loose-coupling development field, on the other side, Orchard is constantly evolving to keep track of changes and improvements, that reflected in Orchard 2 which is based on ASP.NET Core.

To achieve the decoupling goal, Orchard 2 will not has a single framework file (which has all the API's, as Orchard 1), it is broken down to several files, and that will lead to get the following benefits:

  • Each of these modules will have a particular target.
  • You don't need to reference all these API's in your custom module, While you need only a few of them.
  • Improving site performance.
  • It will be very smooth to use any orchard module in a non-Orchard projects, since each framework module can be published as a standalone nuget package.
  • Most of framework modules have an abstraction layer, to be easy to surpass their implementation.

Database Structure

While Orchard 2 will maintain the same single content items table structure, it will have a huge update on how data indexed for search in the database layer, since data access layer in the next version of Orchard will be based on YesSql library (.NET document database using any RDBMS).

The following image will describe the new database structure compared to the old one:

As you see, the main difference between them, that in the old structure you can index your data per part, and store the part properties in it's connected record table, but the downside of this structure is that all part records for all the content items which the part is attached to them will be stored in the same table, but this will be changed with the new structure, with the usage of YesSql library, where you are free to add any number of indexing records as you need, either if all the properties are from the same content part, or a combined properties from multiple parts, then you can query your data based on these indexes.

Note

These are my thoughts on the next version of Orchard CMS, and this post will be updated periodically to reflect any new findings, since Orchard 2 is still in Pre-Alpha stage, it will have a lot of changes in the upcoming stages, and we eagerly await to see what's new.

Tags

Leave a comment

7 Comments

  • William Best

    Great article. I can't wait to read more.

  • Jim Wang

    Great, looking forward to Orchard 2!

    Thanks!

  • mdameer

    Thanks William and Jim, we all very excited about Orchard CMS 2, can't wait to try it in live project.

  • Ben

    The database structure you are showing here does not reflect the actual structure at all. It might be structure of objects in the code, but not in the database. It's actually totaly different especially with the use of YesSql.
    I think the Orchard 2 makes a huge mistake with using YesSql and reverse composition and that will probably be the end of this (initially) nice project. Although the idea of building a CMS with a strong typed languague is questionable, but the Orchard 1 introduced a nice composition framework for building web applications. Many enterprise level features were and still missing, but there are a lot of good things in Orchard 1 which with this new version we will never get. The reason is simple, 'YesSql'. This fundamentally wrong idea of using a SQL database as No-SQL database has been seen before, tried before and failed in all cases. They are 2 very different things and using one like the other is totally wrong. You will loose all the good things of both types of database. For example, with the use of YesSql you won't be able to use 'Concurrency', 'Resource Based Authorization' almost all of good features of the MSSQL Server offers like Change Data Capture, Partitioning, ...and many more. I think this Orchard 2 has an identity problem.
    The architecture may work for a blog website, but the claims are different. The Orchard 1 wasn't for blog website, it was more like a CMF for building different kind of web applications.Back to YesSql, the way it work you will have one single table with a few column and one column which consists the entire 'document' as json. The content of this document could be copied to different 'indexes' tables at design time. So if you have a Customer document and have 5 indexes on it, it means that you have some parts of customer data in 5 different tables, too. Each time the document is changed, all other 5 index tables should be update, too!...Well, that makes the size of my database a few times more, may create a lot of dead-locks when updates are high and makes database tuning at server level very difficult.
    I can go on and on with this, but I already waisted a few month of my time with this Orchard 2.There are offcourse nice things like splitting the framework and the use of ASP.NET Core in Orchard 2. But for some one with large databases like me, it isn't the right tool anymore. And to tell you the trouth it never was.
    I almost never write a comment anywhere, but this time I made an exception, because I see no one in the community dare to open his mouth and say anything. The combination of a very silent community and this steering commitee with their weird way of 'steering' aren't the right ingredient for a succesful project.
    So at the end, if you want CMS, use WordPress, Joomla, Drupal...if you can not because you don't know php, well...believe me, it's much easier than you think and you don't need it very much when using these cms's. If you want to build large web applications with many database transactions and data, stay away from any CMS, let alone Orchard 1 and especially 2.
    Good luck to all,
    Benjamin S.

  • Vijay

    can you update the membership to support ASP identity based

    1) dynamic roles (runtime adding and deleting roles, users
    2) and multitenancy/
    3) user alerts, lock outs etc

  • Herman van der Blom

    @Benjamin S: It does not make me happy that I don't see any response on your Comment because you take a lot of time to invest in Orchard 2. I need a CMS to. My requirement is ASP.NET MVC. I looked into Orchard 1 but not sure Orchard it is the way to go. If your comment is right the 'pre alpha' is not for me. The loose coupling thing is something I want. Orchard 1 is 93 compiled projects??? Why do I need all that stuff??? Why are there no design guidelines. As an Architect you start with a Baseline application. Got the name 'Baseline' from Microsoft itself :-) Where is the Baseline in Orchard 1??? There is none, so they start new with Orchard 2 and try to do it may be right this time.

  • Ezra Chen

    Ben, I agree your viewpoint. I think per part per table of orchard 1 is very nice. And for data modeling issue, it is very clear. I haven't study yesSQL. But base on my RDBMS experience, orchard 1 is very well for business transaction application. And good performance for reporting.... If yesSQL is like jason style, it will be big problem for reporting.