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

合约服务架构-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.dtcms.com/a/359666.html

相关文章:

  • Linux系统比较两个​​已排序文件​​的实用工具之comm
  • R3:适用于 .NET 的新一代响应式扩展库,事件订阅流
  • HarmonyOS 应用开发:基于API 12及以上的新特性与实践
  • 视觉大模型与多模态理解
  • MySQL直接启动命令mysqld详解:从参数说明到故障排查
  • 容器seccomp配置文件在云服务器安全策略中的实施规范
  • 基于单片机老人防丢失防摔倒系统/老人健康状态检测系统
  • 神州数码VRRP 原理与配置篇
  • 【lua】二进制数据打包和解析
  • 使用 Python 自动化检查矢量面数据的拓扑错误(含导出/删除选项)
  • 【C++ 】STL详解(六)—手撸一个属于你的 list!
  • Lua基础知识精炼
  • vscode+EIDE+Clangd环境导入keil C51以及MDK工程
  • PortSwigger靶场之Stored XSS into HTML context with nothing encoded通关秘籍
  • AG32 Nano开发板的烧录与调试工具(二)
  • LabVIEW 瀑布图与游标操作
  • Python人工智能机器学习汇总
  • MySQL 常用语法
  • CTFshow系列——命令执行web69-72
  • 贝叶斯分类(Bayes Classify)
  • 【嵌入式DIY实例】-空中鼠标
  • Ubuntu安装NVIDIA显卡驱动
  • C#基础(③CMD进程)
  • 【C2000】C2000的国产替代现状与技术关键路径
  • unity3d 中 R3 实际使用 安装方法
  • 吴恩达机器学习作业十 PCA主成分分析
  • 【量化回测】backtracker整体架构和使用示例
  • arm容器启动spring-boot端口报错
  • linux 内核 - 常见的文件系统介绍
  • 【K8s】整体认识K8s之存储--volume