🌟 项目简介
NaiveDev —— 一个遵循领域驱动设计(DDD)洋葱模型原则的 Web API 项目。
🚀 技术栈
- EntityFrameworkCore 🏢:强大的ORM框架,简化数据库操作。
- MySql 🗄️:稳定可靠的关系型数据库。
- Redis 🐇:高速缓存利器,提升应用响应速度。
- Jwt 🔑:安全无状态的身份验证与授权机制。
- Autofac 🧰:智能的依赖注入容器,轻松管理应用依赖,让代码更加清晰、灵活。
- MediatR 💬:优雅的消息传递中间件,促进请求与响应的分离,优化应用架构。
- AutoMapper 🔄:一键实现对象映射,简化数据转换流程,支持复杂场景。
- Knife4jUI 📖:Swagger的升级版,提供直观的API文档与测试界面,简化API管理。
📚 项目结构概览
- Interfaces(接口层)🔌:
- 这一层主要定义系统对外的接口,包括HTTP API接口定义(ASP.NET Core的Controllers),以及系统内部服务间的接口。
- 它不涉及具体的业务逻辑实现,只是定义了如何与外部世界(如前端、其他系统)交互的契约。
- 使用接口可以使得系统更加灵活,便于测试(如使用Mock对象)和替换实现。
- Application(应用层)🎛️:
- 应用层是领域层与表示层(如Web API)之间的桥梁。
- 它负责编排领域层中的领域服务来执行特定业务用例的操作。
- 应用层可以包含业务用例的协调逻辑,但它不含有业务规则或知识,这些应该放在领域层。
- 它也负责处理事务、权限校验等跨领域的关注点。
- Domain(领域层)🧠:
- 领域层是系统的核心,包含了业务逻辑和规则。
- 它定义了领域的实体(Entities)、值对象(Value Objects)、聚合根(Aggregates)。
- 领域层应尽可能保持纯净,只包含与业务逻辑直接相关的代码,不依赖任何外部技术(如数据库访问技术)。
- Infrastructure(基础设施层)🔧:
- 基础设施层为领域层和应用层提供技术支持,如数据库访问、消息队列、外部系统集成等。
- 它实现了领域层定义的仓库接口,处理数据持久化。
- 基础设施层还可能包含跨领域的关注点实现,如日志记录、配置管理等。
- 它依赖于外部系统和技术,因此与领域层保持松耦合关系。
- Shared(共享层)🔀:
- 共享层用于存放那些跨多个层使用的类型、枚举、常量等。
- 它帮助减少代码重复,提高代码复用性。
- 需要注意的是,应谨慎使用共享层,避免将业务逻辑或技术细节放入其中,导致层次间的耦合度增加。
🎯 项目目标
NaiveDev 致力于通过DDD架构与现代技术栈的融合,打造一款易于维护的Web API应用程序。我们专注于业务逻辑的实现,同时注重代码的清晰性。
🤝 贡献与参与
我们热烈欢迎每一位热爱技术的朋友加入我们的行列!无论是提交bug报告、提出功能建议还是直接贡献代码,我们都将给予最诚挚的感谢与欢迎。