keep it simple

作者分享了使用DDD方法重写旧项目代码的过程,通过减少synchronized关键字和SQL语句提高代码质量和运行效率。同时讨论了如何保持代码简洁,以及面对同步数据等小规模需求时的决策思考。

上周末开始打算用周末的业余时间整理一下原来项目的代码。其实最早的想法是重构——用martin书上的方法试验一把。但是刚开了一个头,就感觉到处都不对劲儿。于是试着改用DDD的方法开始重写代码,业务逻辑还真实TMD复杂阿。我希望重写后,代码更加的敏捷——更容易被阅读,容易被修改本,当然运行效率的大幅提升也是重要目标之一。看着n多的synchronized关键字被干掉,n多的sql被cut,感觉爽多了。

 

本周在写从另外系统同步数据到本系统这部分代码的时候,我突然觉得很大的sql感觉相当的不爽。其实这部分的功能很简单——像极了的beanUtils.copyProperties方法,只是这个属性对应数据库的列而已。为了让这部分代码保持代码的简单,考虑是否需要将这个同步抽取出来成为单独的一个project。

考虑再三,决定完全copy原有的code。甚至在这一层次将java中对象的概念都去掉。

1. 如果我将这部分同步数据的工作抽取出来,成为一个高复用性的lib,那么我这部分的同步代码将看起来相当简单
2. 但是为此,我必须另开一个project来完成这个工作,而它的代码量一定比现在要多的多(为了可复用)
3. 这种需求很少,并且在整个project中,仅仅是一个很小的环节,这个项目本身的工作量在业务流程处理上因此决定放弃,改用完全copy原有代码。

原因是同样是保持代码的精简,为代码保持简单——虽然这会导致在这个class中的职责比较混乱,但是我认为应该是可以容忍的。

 

早上在je上看到一篇帖子 http://www.javaeye.com/topic/306436
感觉不大的一个项目,居然为了容灾处理连异地双机双向备份都用上了,却用的小区2m宽带(如果是adsl,那么就意味着实际上的备份的理论最高速度只有512k/8)。我觉得一个manager在初期应该将问题简单化,使工作放到重点中来。

 

保持简单并不仅仅意为着对于自身质量的追求,同样需要勇气和胆量去掉不合理的需求,保持平衡。

 

感觉真是践阿,周末都在“加班”,boss甚至连知道都不知道,不过这样也好,这个“项目”对我来说就是可以容忍失败的试验而已。

难不成生来就是程序员的命?

 

# UML建模、设计原则 ## 详解 UML(统一建模语言)是一种用于软件系统建模的标准语言,它提供了图形化的表示方式来描述系统的结构和行为。设计原则是面向对象设计和开发中的核心指导思想,帮助我们构建可维护、可扩展、可复用的软件系统。 --- ### 一、UML建模 #### 1. UML图的分类 UML图主要分为**结构图**和**行为图**两类: ##### 结构图(描述系统静态结构) 1. **类图(Class Diagram)** - 描述类之间的关系(继承、实现、关联、依赖等)。 - 是面向对象系统中最常用的图。 2. **对象图(Object Diagram)** - 表示某一时刻系统中对象及其关系的快照。 3. **组件图(Component Diagram)** - 描述系统中模块(组件)之间的依赖关系。 4. **部署图(Deployment Diagram)** - 描述系统的物理部署结构,如服务器、节点等。 ##### 行为图(描述系统动态行为) 1. **用例图(Use Case Diagram)** - 展示系统功能与用户(参与者)之间的交互关系。 2. **活动图(Activity Diagram)** - 类似流程图,描述操作、工作流或用例中的步骤流程。 3. **状态图(State Machine Diagram)** - 描述对象在其生命周期中状态的变化。 4. **顺序图(Sequence Diagram)** - 展示对象之间的交互顺序,强调时间顺序。 5. **通信图(Communication Diagram)** - 描述对象之间的交互关系,强调对象之间的链接。 --- ### 二、设计原则 设计原则是指导我们编写高质量代码的核心理念,以下是几个经典的面向对象设计原则: #### 1. SOLID 原则(面向对象五大核心设计原则) - **S - 单一职责原则(SRP)** 一个类/方法只负责一项职责。 - **O - 开放封闭原则(OCP)** 对扩展开放,对修改关闭。 - **L - 里氏替换原则(LSP)** 子类应能替换父类而不破坏程序逻辑。 - **I - 接口隔离原则(ISP)** 客户端不应依赖它不需要的接口。 - **D - 依赖倒置原则(DIP)** 依赖抽象(接口),不依赖具体实现。 #### 2. 其他常见设计原则 - **DRY(Don't Repeat Yourself)** 避免重复代码,使用抽象或封装。 - **KISS(Keep It Simple, Stupid)** 设计应尽量简单直接。 - **YAGNI(You Aren't Gonna Need It)** 不要提前实现可能不需要的功能。 - **LoD(Law of Demeter)** 一个对象应只与直接朋友通信,减少耦合。 --- ## 知识点 1. **UML图分类**:分为结构图和行为图,用于描述系统结构和行为。 2. **SOLID原则**:面向对象设计五大原则,提升代码可维护性。 3. **设计模式基础**:设计原则是设计模式的理论基础,用于构建高质量系统。
09-14
# 回答 ## 代码概述 UML建模和设计原则虽然本身不是代码,但在实际软件开发中会直接影响代码结构和系统设计。下面将通过示例代码来展示如何在编程中应用这些设计原则,并简要说明如何通过工具(如PlantUML)生成UML图。 --- ## 代码解析 ### 1. UML建模工具示例(PlantUML) PlantUML 是一种基于文本的 UML 建模工具,可以通过简单的语法生成类图、时序图等。 #### 示例:类图(Class Diagram) ```plantuml @startuml class User { +String name +int age +void login() +void logout() } class UserService { +void authenticate(User user) +void register(String email, String password) } User "1" --> "1..*" UserService : uses @enduml ``` **说明**: - `User` 类和 `UserService` 类之间建立了依赖关系。 - 可使用 PlantUML 工具将其生成为 UML 类图。 --- ### 2. 设计原则的代码实现 #### 单一职责原则(SRP) ```python class User: def __init__(self, name, age): self.name = name self.age = age class UserSerializer: def to_json(self, user): return f'{{"name": "{user.name}", "age": {user.age}}}' ``` ✅ **符合SRP**:`User` 负责数据管理,`UserSerializer` 负责序列化,职责分离。 --- #### 开放封闭原则(OCP) ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod 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 __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 ``` ✅ **符合OCP**:当新增图形时,不需要修改已有代码,只需扩展即可。 --- #### 依赖倒置原则(DIP) ```python class LightBulb: def turn_on(self): print("LightBulb: ON") def turn_off(self): print("LightBulb: OFF") class Switch: def __init__(self, device): self.device = device def operate(self): self.device.turn_on() ``` ✅ **符合DIP**:`Switch` 不直接依赖具体实现,而是依赖于抽象接口(如 `turn_on` 方法)。 --- ## 知识点 1. **UML图分类**:分为结构图和行为图,用于描述系统结构和行为。 2. **SOLID原则**:面向对象设计五大原则,提升代码可维护性。 3. **设计模式基础**:设计原则是设计模式的理论基础,用于构建高质量系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值