Sébastien TIMONER
作为 Web 开发和技术团队管理专家,我专注于创建和优化高性能数字解决方案。通过对 React.js、Node.js、TypeScript、Symfony 和 IoT 领域的 Zephyr OS 等现代技术的深入掌握,我确保在 offroadLabs 中为各行业企业的复杂 SaaS 和 IoT 项目从设计到生产的成功。
在 offroadLabs,我提供定制开发服务,结合技术专长和协作方法。无论是创建创新的 SaaS 解决方案、使用 Zephyr OS 开发 IoT 系统、现代化现有应用程序还是支持团队的专业成长,我都致力于提供稳健且高效的解决方案,适应每个项目的具体需求。
我可以在艾克斯普罗旺斯周边或完全远程工作。
如何构建现代 Web 应用?如何确保它能长期保持可维护性?在本指南中,我们将使用六边形架构和强大的表单验证创建一个 Next.js 应用。为了让学习更有趣,我们将创建一个绝地学院注册系统!
源代码可在 GitHub 上获取。
六边形架构,也称为"端口和适配器"模式,是一种架构模式,它允许创建具有以下特点的业务组件:
该架构分为三个主要层次:
[内容继续...]
[以下内容按照原文格式继续翻译...]
bash
创建项目时,回答以下问题:
Would you like to use TypeScript? Yes
Would you like to use ESLint? Yes
Would you like to use Tailwind CSS? Yes
Would you like to use `src/` directory? Yes
Would you like to use App Router? (recommended) Yes
Would you like to customize the default import alias (@/*)? Yes
Using Next.js version 15.0.0+ with Turbopack
项目创建后,安装依赖:
bash
初始化 shadcn/ui 时,回答以下问题:
Would you like to use TypeScript (recommended)? Yes
Which style would you like to use? › Default
Which color would you like to use as base color? › Slate
Where is your global CSS file? › src/app/globals.css
Would you like to use CSS variables for colors? › Yes
Where is your tailwind.config.js located? › tailwind.config.js
Configure the import alias for components: › @/components
Configure the import alias for utils: › @/lib/utils
Are you using React Server Components? › Yes
# 安装必要的组件
npx shadcn@latest add form input select textarea button card toast table
bash
src/
├── app/
│ ├── actions/
│ │ └── register-padawan.ts
│ ├── components/
│ │ ├── ui/ # shadcn/ui 组件
│ │ ├── jedi-form.tsx
│ │ └── padawan-list.tsx
│ ├── lib/
│ │ └── utils.ts # shadcn/ui 工具
│ └── page.tsx
├── core/
│ ├── domain/
│ │ ├── models/
│ │ │ └── padawan.ts
│ │ ├── ports/
│ │ │ └── padawan-repository.ts
│ │ ├── services/
│ │ │ └── padawan-eligibility.ts
│ │ ├── validation/
│ │ │ └── padawan-schema.ts
│ │ └── events/
│ │ └── padawan-registered.ts
│ └── usecases/
│ └── register-padawan.ts
└── infrastructure/
└── db/
├── prisma/
│ ├── migrations/
│ └── schema.prisma
├── prisma.ts
└── repositories/
└── prisma-padawan-repository.ts
此结构遵循清晰的六边形架构:
app/
- Next.js 用户界面层actions/
- 表单处理的服务器操作components/
- UI/业务分离的 React 组件lib/
- 共享工具core/
- 纯业务逻辑domain/
- 模型、端口和业务服务usecases/
- 应用用例infrastructure/
- 技术实现db/
- Prisma 配置和仓库实现领域是我们应用的核心。这里是我们将业务规则转换为代码的地方,独立于任何技术考虑。在我们的案例中,领域代表了管理绝地学院注册的所有规则。
模型代表基本的业务概念。
typescript
事件代表领域中发生的重要事实。
typescript
端口定义了领域如何与外部世界交互。
typescript
领域服务封装了不自然适合实体的业务逻辑。
typescript
用例协调不同领域元素之间的交互以实现业务功能。
typescript
基础设施层实现了领域中定义的端口以与外部世界交互。
prisma
typescript
输入数据验证使用 Zod 来确保与我们的领域保持一致。
typescript
现在我们可以生成数据库。
bash
为了进一步探索,Prisma 提供了一个客户端来可视化数据库。
bash
typescript
typescript
typescript
这些组件使用 shadcn/ui 创建了现代且无障碍的用户界面,具有:
所有内容都完美地集成到我们的六边形架构中,同时保持在表现层,不包含业务逻辑。
typescript
typescript
六边形架构使我们能够创建一个:
要进一步发展,你可以:
记住:好的架构就像原力一样 - 必须保持平衡!🌟
[翻译结束]