#钱包 #账户 #系统 #特质 #基本钱包 #多货币钱包

bin+lib wallet_system

Rust 钱包系统模拟

3 个版本

0.1.3 2024 年 6 月 25 日
0.1.2 2024 年 6 月 25 日
0.1.0 2024 年 6 月 25 日

68模拟

37 每月下载量

MIT 许可证

44KB
862 代码行

项目概述

此项目是一个用 Rust 编写的银行系统模拟。它包括钱包和账户等实体,并使用特质、泛型和多态性来提供灵活和可扩展的设计。

实体

钱包

钱包可以包含多个账户。它具有唯一的 wallet_idwallet_type,可以是 BasicMultiCurrency

账户

账户代表具有特定货币的银行账户。它具有唯一的 account_numberaccount_type,可以是 BasicPremium

BasicWalletMultiCurrencyWalletWallet 特质的两种不同实现,每种都有其独特的特点。

基本钱包

BasicWallet 是一个简单的钱包,只能包含一个账户。它使用泛型来允许将不同类型的账户添加到钱包中。账户在创建 BasicWallet 时设置,之后不能更改。这种设计适用于钱包预期只有一个账户的情景。

多货币钱包

MultiCurrencyWallet 的另一方面,可以包含多个账户,每个账户有不同的货币。与 BasicWallet 不同,它不使用泛型。相反,它使用向量来存储多个装箱的 Account 特质对象。这允许在创建钱包之后添加不同类型的账户。这种设计适用于钱包预期处理多种货币的情景。

BasicWallet 中泛型的使用以及 MultiCurrencyWallet 中不使用泛型的原因在于它们的不同需求。 BasicWallet 需要在编译时知道其账户的确切类型,因此使用了泛型。 MultiCurrencyWallet 需要处理可能具有不同类型的多个账户,因此使用了特质对象。

特质、泛型和多态性

特质

特质用于定义共享行为。在此项目中,WalletAccount 特质定义了所有类型钱包和账户的共同接口。

Rust 中的特质

  • 特质用于定义共享行为。
  • 特质使用 trait 关键字定义,后跟特质的名称。
  • 特性可以具有带或不带默认实现的方法。
  • 任何数据类型都可以实现特性。
  • 特性可以用作函数参数,从而实现动态分派。
  • 特性可以用作泛型参数的特性边界,从而实现静态分派。
  • 特性可以继承自其他特性。这是通过在特性定义中指定父特性来实现的。
  • 子特性随后将包含父特性的方法签名。

泛型

泛型用于《Wallet》特性中,允许将不同类型的账户添加到钱包中。《BasicWallet》结构体对《Account》类型是泛型的,这允许它包含任何实现《Account》特性的类型。《MultiCurrencyWallet》结构体则使用特性对象来存储不同类型的多个账户。

Rust中的泛型

  • 泛型用于创建可以与多种数据类型一起工作的函数和数据类型。
  • 泛型使用尖括号声明,其中T是类型的占位符。
  • T的实际类型是在编译时确定的。
  • 泛型可以通过特性约束来限制,只接受实现某些行为的类型。
  • 可以使用逗号分隔多个泛型类型,如
  • 生命周期,它规定了如何处理数据引用,也可以是泛型的。

多态

多态用于允许以相同的方式处理不同类型的钱包和账户。例如,《BasicWallet》和《MultiCurrencyWallet》都可以被视为《Wallet》。一个《BasicAccount》和一个《PremiumAccount》都可以被视为《Account》。

Rust中的多态

  • Rust通过使用特性和特性对象来实现多态。
  • 特性定义了一个类型必须拥有的方法集,以被认为是实现了该特性。
  • 特性对象允许将实现特定特性的多个不同类型的类型视为相同的通用类型。
  • 特性对象是通过在引用、box或其他指针类型后面指定特性来创建的,如&dyn Trait或Box。
  • 特性对象是动态的,它们的类型在运行时进行检查。

函数

钱包函数

  • add_account:将账户添加到钱包中。
  • balance:返回特定货币的钱包余额。
  • get_wallet_id:返回钱包的唯一ID。
  • get_wallet_type:返回钱包的类型。
  • find_account_index_by_currency:通过货币找到钱包中账户的索引。
  • get_account_number_by_index:返回钱包中特定索引的账户号码。
  • get_account_by_currency:通过货币返回钱包中的账户。
  • transfer:从钱包转账到另一个钱包。
  • deposit:将钱存入钱包。
  • withdraw:从钱包中取款。

账户函数

  • get_account_number:返回唯一的账户号码。
  • get_account_type:返回账户的类型。
  • get_balance:返回账户的余额。
  • get_currency:返回账户的货币。
  • deposit:将钱存入账户。
  • withdraw:从账户中取款。
  • transfer:从账户转账到另一个账户。

枚举

WalletType

这个枚举表示钱包的类型。它可以是 BasicMultiCurrency

AccountType

这个枚举表示账户的类型。它可以是 BasicPremium

ID 生成

wallet_idaccount_number 分别是钱包和账户的唯一标识符。

构建和测试

要构建项目,请导航到项目目录并运行以下命令

cargo build

要运行测试,请使用以下命令

cargo test

在构建或测试项目之前,请确保您的系统已安装 Rust 和 Cargo。

依赖项

~2.5MB
~40K SLoC