Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
1. Summary
Horizontal Components, within the context of software architecture and design, refer to modular parts of a system
that provide shared services or functionality across different areas of that system. Unlike vertical components, which
are designed to address specific business requirements or user stories from top to bottom, horizontal components are
focused on common capabilities that can be utilized by multiple verticals or layers within the application. This
approach helps in reducing redundancy, improving maintainability, and ensuring consistency across the application.
This specification seeks to address the critical issue of code entanglement within our Content Management
System (CMS), particularly focusing on features such as Tags, Workflow, Access Control Lists (ACL), Custom Fields, and
others that are currently tightly coupled with the core codebase.
2. Why Bother?
The entanglement of key features within the CMS codebase presents significant challenges to the system's
maintainability, scalability, and flexibility. The current state not only makes it difficult to introduce new features
or modify existing ones but also increases the risk of bugs and complicates the debugging process. By addressing this
issue, we aim to achieve several critical objectives:
Enhance Maintainability: Reducing code entanglement will make the system easier to understand, modify, and extend.
This is crucial for the long-term sustainability of the CMS, as it reduces the effort required to implement new
features or update existing ones.
Improve Scalability: A modular architecture allows for the system to be scaled more easily. Components can be
developed, tested, and deployed independently, facilitating a more agile development process and enabling the system
to adapt to changing requirements.
Increase Flexibility: By adopting orthogonal components, we can create a more flexible architecture that allows
for the easy integration of new technologies and methodologies. This flexibility is key to staying competitive and
meeting the evolving needs of our users.
Reduce Technical Debt: Moving away from "poor man's composition" and towards a cleaner, more structured approach
to code organization will significantly reduce technical debt, making our CMS more robust and reliable.
Foster Innovation: By simplifying the process of modifying and extending the CMS, we can more easily explore new
ideas and innovations, ultimately leading to a better product for our users.
Through this RfC, we invite contributors to share their insights, ideas, and proposals for how best to achieve these goals, ensuring that our CMS remains a powerful, efficient, and user-friendly platform.