前后端分离架构 + 项目架构设计

一句话:前后端分离是将前端和后端独立开发、部署的架构模式。项目架构设计是规划代码结构、模块划分、依赖关系的过程。

1. 前后端分离架构

1.1 什么是前后端分离?


graph TD

    A[前后端分离] --> B[前端独立]

    A --> C[后端独立]

    A --> D[API通信]

    A --> E[独立部署]

    style A fill:#e1f5fe

前后端分离:将前端和后端作为独立应用开发,通过API进行通信。

1.2 架构优势

优势说明
开发效率前后端并行开发
技术选型前后端独立选择技术栈
部署灵活独立部署,互不影响
扩展性可独立扩展前端或后端

1.3 通信方式


graph LR

    A[前端] -->|HTTP/HTTPS| B[后端API]

    B -->|JSON数据| A

    style B fill:#e8f5e8

通信方式

  • RESTful API

  • GraphQL

  • WebSocket

  • gRPC

2. 项目架构设计

2.1 分层架构


graph TD

    A[表现层] --> B[业务逻辑层]

    B --> C[数据访问层]

    C --> D[数据库]

    style A fill:#e1f5fe

    style B fill:#e8f5e8

    style C fill:#fff3e0

分层架构

  • 表现层:处理用户界面和请求

  • 业务逻辑层:处理业务规则

  • 数据访问层:处理数据存储

2.2 目录结构

 
project/
 
├── frontend/          # 前端代码
 
   ├── src/
 
   ├── components/  # 组件
 
   ├── pages/       # 页面
 
   ├── services/    # API服务
 
   └── utils/       # 工具函数
 
   └── package.json
 
├── backend/           # 后端代码
 
   ├── app/
 
   ├── api/         # API路由
 
   ├── models/      # 数据模型
 
   ├── services/    # 业务逻辑
 
   └── utils/       # 工具函数
 
   └── requirements.txt
 
├── docker-compose.yml # Docker配置
 
└── README.md
 

3. 实际案例

3.1 FastAPI + React项目

 
# docker-compose.yml
 
version: '3'
 
services:
 
  frontend:
 
    build: ./frontend
 
    ports:
 
      - "3000:3000"
 
    depends_on:
 
      - backend
 
  backend:
 
    build: ./backend
 
    ports:
 
      - "8000:8000"
 
    environment:
 
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
 
    depends_on:
 
      - db
 
  db:
 
    image: postgres:15
 
    environment:
 
      - POSTGRES_USER=user
 
      - POSTGRES_PASSWORD=pass
 
      - POSTGRES_DB=mydb
 
    volumes:
 
      - postgres_data:/var/lib/postgresql/data
 
volumes:
 
  postgres_data:
 

3.2 API设计

 
# FastAPI后端
 
from fastapi import FastAPI
 
from pydantic import BaseModel
 
app = FastAPI()
 
class UserCreate(BaseModel):
 
    name: str
 
    email: str
 
class UserResponse(BaseModel):
 
    id: int
 
    name: str
 
    email: str
 
@app.post("/api/users/", response_model=UserResponse)
 
async def create_user(user: UserCreate):
 
    # 创建用户逻辑
 
    return UserResponse(id=1, name=user.name, email=user.email)
 
@app.get("/api/users/{user_id}", response_model=UserResponse)
 
async def get_user(user_id: int):
 
    # 获取用户逻辑
 
    return UserResponse(id=user_id, name="Alice", email="alice@example.com")
 

3.3 React前端

 
// React前端
 
import { useState, useEffect } from 'react';
 
function UserList() {
 
    const [users, setUsers] = useState([]);
 
    useEffect(() => {
 
        fetch('/api/users/')
 
            .then(response => response.json())
 
            .then(data => setUsers(data));
 
    }, []);
 
    return (
 
        <div>
 
            <h1>Users</h1>
 
            <ul>
 
                {users.map(user => (
 
                    <li key={user.id}>{user.name}</li>
 
                ))}
 
            </ul>
 
        </div>
 
    );
 
}
 

4. 设计原则

4.1 SOLID原则

 
# 单一职责原则
 
class UserService:
 
    def create_user(self, user_data):
 
        # 只处理用户创建
 
        pass
 
# 开闭原则
 
class PaymentProcessor:
 
    def process(self, payment_method):
 
        # 对扩展开放,对修改关闭
 
        pass
 
# 里氏替换原则
 
class Animal:
 
    def speak(self):
 
        pass
 
class Dog(Animal):
 
    def speak(self):
 
        return "Woof!"
 

4.2 DRY原则

 
# 不要重复自己
 
def validate_email(email):
 
    # 邮箱验证逻辑
 
    pass
 
# 使用装饰器避免重复
 
def validate_user(func):
 
    def wrapper(user_data):
 
        validate_email(user_data['email'])
 
        return func(user_data)
 
    return wrapper
 

5. 常见坑点

1. API设计不一致

 
# /api/users/{id} (GET, PUT, DELETE)
 

2. 跨域问题

 
# 解决:配置CORS
 
from fastapi.middleware.cors import CORSMiddleware
 
app.add_middleware(
 
    CORSMiddleware,
 
    allow_origins=["http://localhost:3000"],
 
    allow_credentials=True,
 
    allow_methods=["*"],
 
    allow_headers=["*"],
 
)
 

核心要点

 
# 项目结构
 
project/
 
├── frontend/
 
├── backend/
 
├── docker-compose.yml
 
└── README.md
 
# API设计
 
GET /api/users/ - 获取用户列表
 
POST /api/users/ - 创建用户
 
GET /api/users/{id} - 获取用户
 
PUT /api/users/{id} - 更新用户
 
DELETE /api/users/{id} - 删除用户
 

速记卡(面试闪卡)

Q1:一句话讲清「前后端分离架构 + 项目架构设计」到底是什么?

A:前后端拆成独立应用靠 API 通信协作,项目架构则规划分层与目录结构。

Q2:题目核心 —— 怎么理解?

A:像餐厅前厅和后厨分开:各干各的,靠”点菜单”传话;英文 Front-end/Back-end Separation,通过 RESTful/GraphQL 等 API 通信。

Q3:思路拆解 —— 怎么理解?

A:如同盖楼分层:表现层管界面、业务层管规则、数据层管存储;英文 Layered Architecture 分层架构,前后端各自按模块划目录。

Q4:代码骨架 —— 怎么理解?

A:好比约定暗号:后端 FastAPI 用 Pydantic 定义请求响应模型,前端 fetch 调 /api/users;英文 CORS 解决跨域、REST 统一路由风格。

Q5:复杂度与实战 —— 怎么理解?

A:如同两家公司合租:独立部署互不影响,但 API 不一致、跨域是常见坑;英文 SOLID/DRY 原则指导模块划分避免重复。

Q6:核心速记主线有哪些?

  • 分离:前后端独立开发部署,API(REST/GraphQL)通信

  • 分层:表现层、业务层、数据访问层职责分明

  • 案例:FastAPI+React,docker-compose 编排前后端与库

  • 坑点:API 命名统一、配置 CORS 解决跨域

口诀

A:前后端分两家开

API传话不分家

分层职责划清楚

CORS跨域莫忘加

相关链接