架构设计基础 学习笔记(第 4 部分)
Vue 响应式系统原理:
javascript
// 简化的响应式系统实现
class Dep {
constructor() {
this.subscribers = new Set()
}
depend() {
if (activeEffect) {
this.subscribers.add(activeEffect)
}
}
notify() {
this.subscribers.forEach(effect => effect())
}
}
let activeEffect = null
function watchEffect(effect) {
activeEffect = effect
effect()
activeEffect = null
}
// 使用示例
const dep = new Dep()
let count = 0
watchEffect(() => {
dep.depend()
console.log(`count is: ${count}`)
})
// 触发更新
count++
dep.notify() // 输出: count is: 1事件总线示例:
javascript
// Vue 3 事件总线
class EventBus {
constructor() {
this.events = {}
}
on(event, callback) {
if (!this.events[event]) {
this.events[event] = []
}
this.events[event].push(callback)
}
emit(event, ...args) {
if (this.events[event]) {
this.events[event].forEach(callback => callback(...args))
}
}
off(event, callback) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(cb => cb !== callback)
}
}
}
// 使用示例
const bus = new EventBus()
// 订阅事件
bus.on('user-login', (user) => {
console.log(`用户 ${user.name} 登录成功`)
})
// 发布事件
bus.emit('user-login', { name: '张三' })4.2.5 分布式系统架构模式
主从架构模式:
plaintext
┌──────────────┐
│ 主服务器 │ ← 读写操作
└──────┬───────┘
│ 数据同步
┌──────┴───────┐
│ │
▼ ▼
从服务器1 从服务器2
(只读) (只读)分布式数据模式:
javascript
// 数据分片示例
class ShardManager {
constructor(shards) {
this.shards = shards // 分片节点列表
}
// 根据 key 决定数据存储位置
getShard(key) {
const hash = this.hash(key)
const index = hash % this.shards.length
return this.shards[index]
}
// 简单哈希函数
hash(key) {
let hash = 0
for (let char of String(key)) {
hash = (hash << 5) - hash + char.charCodeAt(0)
}
return Math.abs(hash)
}
}
// 使用示例
const shards = ['shard1.db', 'shard2.db', 'shard3.db']
const shardManager = new ShardManager(shards)
const db1 = shardManager.getShard('user:1001') // 存储到 shard1
const db2 = shardManager.getShard('user:1002') // 存储到 shard24.2.6 用户界面架构模式
MVC 模式:
plaintext
Model (数据模型)
↓ 数据变化
View (视图展示) ← 用户交互 → Controller (业务逻辑)MVVM 模式:
plaintext
Model (数据模型)
↕ 数据绑定
ViewModel (视图模型)
↕ 数据绑定
View (视图)Vue 3 MVVM 实战示例:
Vue SFC
<template>
<!-- View 视图层 -->
<div class="user-management">
<input v-model="newUser.name" placeholder="输入用户名" />
<button @click="addUser">添加用户</button>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }}
<button @click="deleteUser(user.id)">删除</button>
</li>
</ul>
</div>
</template>
<script setup>
import { ref, computed } from 'vue'
// Model 数据层
const users = ref([
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
])
const newUser = ref({ name: '' })
// ViewModel 视图模型层
const userCount = computed(() => users.value.length)
const addUser = () => {
if (!newUser.value.name) return
users.value.push({
id: Date.now(),
name: newUser.value.name
})
newUser.value.name = ''
}
const deleteUser = (id) => {
users.value = users.value.filter(user => user.id !== id)
}
</script>五、架构设计工具
5.1 工具分类
| 工具类型 | 代表工具 | 适用场景 |
|---|---|---|
| UML 工具 | Visual Paradigm、PlantUML、StarUML | 统一建模语言设计 |
| 建模工具 | ProcessOn、Draw.io、XMind | 流程图、思维导图 |
| 系统架构工具 | Archi、Structurizr、阿里云架构图 | 系统架构设计 |
| 数据库设计工具 | Navicat、PowerDesigner、MySQL Workbench | 数据库建模 |