OnTopic Library
The OnTopic library is a .NET-based content management system (CMS) designed around structured schemas ("Content Types") and optimized to simplify team-based workflows with distinct roles for content owners, backend developers, and graphic producers.
Roles
The OnTopic library acknowledges that the roles of developers, designers, and content owners are usually compartmentalized and, thus, optimizes for the needs of each.
- Content owners have access to an editor that focuses exclusively on exposing structured data; this includes support for custom content types (e.g., "Job Posting", "Blog Post", &c.)
- Backend developers have access to data repositories, services, and a rich entity model in C# for consuming the structured data and implementing any business logic via code.
- Frontend developers have access to light-weight views based on purpose-built view models, thus allowing them to focus exclusively on presentation concerns, without any platform-specific knowledge.
This is contrasted to most traditional CMSs, which attempt to coordinate all of these via an editor by exposing design responsibilities (via themes, templates, and layouts) as well as development responsibilities (via plug-ins or components). This works well for a small project without distinct design or development resources, but introduces a lot of complexity for more mature teams with well-established roles.
Multi-Device Optimized
In addition, OnTopic is optimized for multi-client/multi-device scenarios since the content editor focuses exclusively on structured data. This allows entirely distinct presentation layers to be established. For instance, the same content can be accessed by an iOS app, a website, and even a web-based API for third-party consumption. By contrast, most CMSs are designed for one client only: a website (which may be mobile-friendly via responsive templates.)
Library
Domain Layer
OnTopic.Topics: Core domain model including theTopicentity and service abstractions such asITopicRepository.
Data Access Layer
OnTopic.Data.Sql:ITopicRepositoryimplementation for storing and retrievingTopicentities in a Microsoft SQL Server database.OnTopic.Data.Sql.Database: Microsoft SQL Server database schema, including tables, views, functions, and stored procedures needed to support theOnTopic.Data.Sqllibrary.
OnTopic.Data.Caching:ITopicRepositoryfaçade that caches data accessed in memory for fast subsequent retrieval.
Note: Additional data access layers can be created by implementing the
ITopicRepositoryinterface.
Presentation Layer
OnTopic.AspNetCore.Mvc: ASP.NET Core 2.x implementation, including a defaultTopicController, allowing templates to be created using*.cshtmlpages and view components.OnTopic.Web.Mvc: ASP.NET MVC 5.x implementation, including a defaultTopicController, allowing templates to be created using*.cshtmlpages.OnTopic.Web: Legacy ASP.NET WebForms implementation, allowing templates to be created using*.aspxpages. This is considered obsolete, and intended exclusively for migration to new versions.OnTopic.ViewModels: Standard view models for exposing factory=default schemas of shared content types. These can be extended, overwritten, or ignored entirely by the presentation layer implementation; they are provided for convenience.
Unit Tests
OnTopic.Tests: .NET Unit Tests, broken down by target class.OnTopic.AspNetCore.Mvc.Tests: .NET Unit Tests for theOnTopic.AspNetCore.Mvcimplementation.
Editor
OnTopic.Editor.AspNetCore: ASP.NET Core 3.1 implementation of the editor interface.OnTopic.Editor: Legacy ASP.NET WebForms implementation of the editor interface.
Credits
OnTopic is owned and maintained by Ignia.