TVP

TVP

3830

👉腾小云导读

# 01、万物皆可抽象

## 1.1 遵循 DRY 原则

DRY 原则（Don’t Repeat Yourself），中文直译为：不要重复自己。将它应用在编程中，可以理解为：不要写重复的代码。

DRY 原则的典型代码重复情况有三种：实现逻辑重复、功能语义重复和代码执行重复。下面我们简单分享。

#### 1.1.1 实现逻辑重复

``````class Calculator:
return a + b

def subtract(self, a, b):
return a - b

def multiply(self, a, b):
return a * b

def divide(self, a, b):
if b == 0:
# ...throw DivideByZeroException...
pass
return a / b

def power(self, a, b):
result = 1
for i in range(b):
result *= a
return result

def square_root(self, a):
if a < 0:
# ...throw InvalidInputException...
pass
return math.sqrt(a)``````

#### 1.1.2 功能语义重复

``````def square1(x):
return x ** 2

def square2(x):
return pow(x, 2)``````

``````def square(x):
return x ** 2``````

#### 1.1.3 功能语义重复

``````class UserRepo:
def __init__(self, db):
self.db = db

if not EmailValidation.validate(email):
# ...throw InvalidEmailException...
pass
pass
# ...query db to check if email&password exists...

def get_user_by_email(self, email):
if not EmailValidation.validate(email):
# ...throw InvalidEmailException...
pass
# ...query db to get user by email...

class UserService:
def __init__(self, user_repo):
self.user_repo = user_repo

if not existed:
# ...throw AuthenticationFailureException...
pass
user = self.user_repo.get_user_by_email(email)
return user``````

``````class UserService:
def __init__(self, user_repo):
self.user_repo = user_repo

if not EmailValidation.validate(email):
# ...throw InvalidEmailException...
pass
pass
user = self.user_repo.get_user_by_email(email)
# ...throw AuthenticationFailureException...
pass
return user
class UserRepo:
def __init__(self, db):
self.db = db

# ...query db to check if email&password exists...

def get_user_by_email(self, email):
# ...query db to get user by email...``````

## 1.2 SOLID 原则

#### 1.2.1 单一职责原则（Single Responsibility Principle，SRP）

`````````
class UserManager:
def __init__(self, user_repo):
self.user_repo = user_repo

if not EmailValidation.validate(email):
# ...throw InvalidEmailException...
pass
pass
self.user_repo.save_user(user)

def get_user_by_email(self, email):
if not EmailValidation.validate(email):
# ...throw InvalidEmailException...
pass
user = self.user_repo.get_user_by_email(email)
return user

class UserRepo:
def __init__(self, db):
self.db = db

def save_user(self, user):
# ...save user to db...

def get_user_by_email(self, email):
# ...query db to get user by email...
`````````

#### 1.2.2 开闭原则（Open-Closed Principle，OCP）

``````class Shape:
def area(self):
pass

class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height

def area(self):
return self.width * self.height

class Circle(Shape):

def area(self):
return math.pi * self.radius ** 2``````

#### 1.2.3 里氏替换原则（Liskov Substitution Principle，LSP）

``````class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height

def get_width(self):
return self.width

def set_width(self, width):
self.width = width

def get_height(self):
return self.height

def set_height(self, height):
self.height = height

def area(self):
return self.width * self.height

class Square(Rectangle):
def __init__(self, size):
self.width = size
self.height = size

def set_width(self, width):
self.width = width

def set_height(self, height):
self.width = height``````

#### 1.2.5 依赖倒置原则（Dependency Inversion Principle，DIP）

• 高层模块不应该依赖于低层模块，两者都应该依赖于抽象。
• 抽象不应该依赖于具体实现，具体实现应该依赖于抽象。

• 更好地理解需求

• 协同工作

• 解决问题

• 推动和解决

# 06、凡事有交代，件件有着落，事事有回音

“凡事有交代，件件有着落，事事有回音”，其实翻译过来就是“做事靠谱”，负责的事情一定会认真负责到底，及时反馈和响应。

# 07、保持开放和学习的心态

• 技术更新迭代速度非常快

• 学习是程序员的必备技能

• 学习可以提高工作效率和质量

# 09、横向发展

• 增强职业竞争力

• 拓宽职业发展道路

• 未来的选择更多样化

0 条评论

• 01、万物皆可抽象
• 1.1 遵循 DRY 原则
• 1.2 SOLID 原则
• 1.3 应用设计模式
• 02、高可用设计
• 2.1 设计高可用的系统架构
• 2.2 日志和监控，包含服务级和业务级
• 03、想尽一切办法“偷懒”
• 3.1 优化重复流程、一切自动化
• 3.2 使用模板和标准化流程
• 3.3 应用项目管理工具和流程
• 04、从价值出发，专注于最重要的事
• 05、沟通与协作也是身为开发的必备技能
• 06、凡事有交代，件件有着落，事事有回音
• 07、保持开放和学习的心态
• 08、职业发展
• 09、横向发展
领券