This project is a scalable, maintainable application architecture template built with Clean Architecture and Domain-Driven Design (DDD). It emphasizes code quality, automation, and best practices for modern software development.
This architecture template combines Clean Architecture principles with practical implementation patterns. While inspired by Uncle Bob's Clean Architecture, it includes adaptations based on real-world experience to better suit modern development needs.
Note: This documentation was created with AI assistance for formatting and clarity.
Before implementing architectural patterns such as MVVM, Clean Architecture, or VIPER, consider these key principles:
- Architecture serves as a means to achieve maintainable and scalable code, not an end in itself
- Architectural decisions should align with project needs and team capabilities
- Premature implementation of complex patterns can introduce unnecessary overhead
- Consider adopting more structured architecture when code maintenance, testing, or extension becomes challenging
- This architecture represents one approach among many valid options, shaped by practical experience and project requirements
- Architecture should be flexible enough to be implemented incrementally as the team and project grow
It's better to have simple, working code than a complicated system that slows down the team.
- Clean Architecture: Strict separation of Presentation, Domain, Data, and (optional) Application layers.
- Domain-Driven Design: Business logic is isolated in the Domain layer, with clear boundaries and responsibilities.
- SwiftUI Best Practices: Modern state management, accessibility, localization, and modular UI components.
- Automation: CI/CD, code quality tools, and automated testing are integrated throughout the workflow.
Wanna to read more? Check my Medium articles
-
https://medium.com/@rayleefx/ios-macos-clean-architecture-part-1-from-chaos-to-clarity-3695e972b36c
-
https://medium.com/@rayleefx/ios-macos-clean-architecture-part-2-unit-testing-b77ec7d7e23a
- ARCHITECTURE.md
- LAYER_RESPONSIBILITIES.md
- NAVIGATION.md
- DEPENDENCY_INJECTION.md
- UNIT_TESTING.md
- CICD.md
- ANTI_PATTERNS.md
- FOLDER_STRUCTURE.md
- ADR.md
- LICENSE
Quick Navigation: Skip to Quick Start →
-
Quick Start
- Read the Quick Start Guide for a minimal implementation example
- Follow the step-by-step guide to create your first feature
-
Basic Setup
- Review the Architecture Overview
- Understand the Layer Responsibilities
- Set up your development environment
-
First Feature
- Create a simple feature following the architecture
- Implement basic CRUD operations
- Add unit tests
We welcome contributions! Here's how you can help:
-
Before Contributing
- Read and understand the architecture principles
- Review existing issues and discussions
-
Development Process
- Create a new branch for your feature
- Follow the established code style
- Write tests for new functionality
- Update documentation as needed
-
Pull Request Process
- Ensure all tests pass
- Update relevant documentation
- Provide clear description of changes
- Reference related issues
For more details, see CONTRIBUTING.md (coming soon).
- Code Quality: Maintain high standards through automated testing, code reviews, and continuous integration
- Developer Experience: Focus on tools and processes that improve productivity and reduce friction
- Scalability: Design for modularity and future growth while keeping the system maintainable
- Inclusivity: Ensure the app is accessible and localized for all users
- Team Collaboration: Foster clear communication and knowledge sharing
- Open an issue for bugs or feature requests
- Start a discussion for architectural questions or improvements