当前位置: 首页 > java >正文

合约服务架构-OOP 方式

文章目录

  • 前言
    • 🎯 经典的面向对象编程!
      • 1. 🏗️ **封装 (Encapsulation)**
      • 2. 🧬 **继承 (Inheritance)**
      • 3. 🎭 **多态 (Polymorphism)**
      • 4. 🎨 **抽象 (Abstraction)**
    • 🏛️ 设计模式的应用
      • 1. **工厂模式 (Factory Pattern)**
      • 2. **单例模式 (Singleton Pattern)**
      • 3. **模板方法模式 (Template Method Pattern)**
    • 🆚 OOP vs 函数式编程对比
      • 之前的函数式方法:
      • 现在的面向对象方法:
    • 🎯 OOP 在合约交互中的优势
      • 1. **更好的代码组织**
      • 2. **更强的类型安全**
      • 3. **更好的可扩展性**
      • 4. **更强的可测试性**
    • 🏆 总结


前言

创建的合约服务架构,典型的**面向对象编程(Object-Oriented Programming, OOP)**的实现

🎯 经典的面向对象编程!

合约服务架构体现了面向对象编程的四大核心特性

1. 🏗️ 封装 (Encapsulation)

export abstract class BaseContractService {protected config: ContractConfig  // 受保护的属性// 私有方法,外部无法直接访问protected validateContractAddress(): boolean {// 内部实现细节被隐藏}// 公共接口,提供统一的访问方式public getContractInfo() {return this.config}
}

封装的好处

  • 隐藏复杂的合约调用细节
  • 提供简洁的公共接口
  • 保护内部状态不被外部直接修改

2. 🧬 继承 (Inheritance)

// 基类定义通用行为
export abstract class BaseContractService {protected async readContract<T>() { /* 通用逻辑 */ }protected async writeContract<T>() { /* 通用逻辑 */ }
}// 子类继承并扩展功能
export class GiftContractService extends BaseContractService {// 继承了父类的所有方法// 添加特定于礼品合约的方法async getAllTokenIds() { return this.readContract('getAllTokenIds', [...])}
}

继承的好处

  • 代码复用,避免重复实现
  • 统一的基础架构
  • 易于维护和扩展

3. 🎭 多态 (Polymorphism)

// 不同的服务类型,但统一的接口
const services: BaseContractService[] = [new GiftContractService(),new MemberContractService(),// 未来可能的其他合约服务...
]// 多态调用 - 同样的方法,不同的实现
services.forEach(service => {console.log(service.getContractInfo()) // 每个服务返回不同的信息
})

4. 🎨 抽象 (Abstraction)

// 抽象类定义规范,不能直接实例化
export abstract class BaseContractService {// 抽象了合约交互的通用概念
}// 接口定义规范
export interface ContractCallOptions {showNetworkCheck?: booleanexpectedChainId?: number// ...
}

🏛️ 设计模式的应用

架构使用了多种经典设计模式:

1. 工厂模式 (Factory Pattern)

class ContractServiceFactory {static register<T>(name: string, ServiceClass: new () => T): T {// 工厂负责创建和管理实例}
}

2. 单例模式 (Singleton Pattern)

// 确保每种服务只有一个实例
let giftContractService: GiftContractService | null = nullexport function getGiftContractService(): GiftContractService {if (!giftContractService) {giftContractService = new GiftContractService()}return giftContractService
}

3. 模板方法模式 (Template Method Pattern)

// 基类定义算法骨架
abstract class BaseContractService {protected async executeContract() {this.validateContractAddress()  // 步骤1:验证await this.callContract()       // 步骤2:调用(子类实现)this.handleResult()            // 步骤3:处理结果}
}

🆚 OOP vs 函数式编程对比

之前的函数式方法:

// 分散的函数,难以管理
async function getAllTokenIds(address) { /* ... */ }
async function transferGift(address, tokenId) { /* ... */ }
async function getSuperior(address) { /* ... */ }// 使用时需要记住所有函数名和参数
const tokens = await getAllTokenIds(userAddress)

现在的面向对象方法:

// 组织良好的类结构
const giftService = new GiftContractService()
const memberService = new MemberContractService()// 直观的方法调用
const tokens = await giftService.getAllTokenIds(userAddress)
const superior = await memberService.getSuperior(userAddress)

🎯 OOP 在合约交互中的优势

1. 更好的代码组织

  • 相关功能聚合在一个类中
  • 清晰的职责分离
  • 更容易定位和维护代码

2. 更强的类型安全

// TypeScript 提供完整的类型检查
class GiftContractService {async getAllTokenIds(address: string): Promise<bigint[]> {// 编译时类型检查}
}

3. 更好的可扩展性

// 添加新合约只需继承基类
class TokenContractService extends BaseContractService {// 自动获得所有基础功能async transfer() { return this.writeContract('transfer', [...]) }
}

4. 更强的可测试性

// 可以轻松模拟(Mock)服务
class MockGiftContractService extends BaseContractService {async getAllTokenIds() { return [1n, 2n, 3n] }
}

🏆 总结

纯正的面向对象编程的合约服务架构,它:

体现了 OOP 四大特性:封装、继承、多态、抽象
应用了多种设计模式:工厂、单例、模板方法
提供了更好的代码组织:清晰的类层次结构
增强了代码的可维护性:统一的接口和实现
提高了开发效率:复用基础功能,专注业务逻辑

http://www.xdnf.cn/news/19441.html

相关文章:

  • leetcode 371 两个整数之和
  • 微软开源TTS模型VibeVoice,可生成 90 分钟4人语音
  • TFS-1996《The Possibilistic C-Means Algorithm: Insights and Recommendations》
  • 一些八股总结
  • 如何快速学习新技能
  • Redis 7.0 高性能缓存架构设计与优化
  • [Android] UI进阶笔记:从 Toolbar 到可折叠标题栏的完整实战
  • IDEA插件ApifoxHelper
  • C++ 登录状态机项目知识笔记
  • Nginx虚拟主机配置
  • CTFshow系列——命令执行web69-72
  • 数据结构 04(线性:双向链表)
  • 【大前端】React配置配置 开发(development)、生产(production)、测试(test)环境
  • 学习数据结构(15)插入排序+选择排序(上)
  • 算法——链表
  • 开源协作白板 – 轻量级多用户实时协作白板系统 – 支持多用户绘图、文字编辑、图片处理
  • 进程间通信IPC(interprocess communicate)
  • Introduction to GIS —— Chapter 4(Raster Data Model)
  • 解读IEC 60529-2013
  • MySQL 公用表达式
  • AI军团协同作战:Manus Wide Research深度解析
  • CAN数据链路层、网络层(ISO11898、15765)
  • JVM-指针压缩
  • Day 01(02): 精读HDFS概念
  • PortSwigger靶场之DOM XSS in document.write sink using source location.search通关秘籍
  • 多线程使用场景一(es数据批量导入)
  • 使用node-red+opencv+mqtt实现相机图像云端查看
  • 【openGauss】Oracle与openGauss/GaussDB数据一致性高效核对方案
  • 解决Docker运行hello-world镜像报错问题
  • 烦人的Nano 编辑器,如何退出呢?