domain-fintech

安装量: 401
排名: #2428

安装

npx skills add https://github.com/zhanghandong/rust-skills --skill domain-fintech

FinTech Domain

Layer 3: Domain Constraints

Domain Constraints → Design Implications Domain Rule Design Constraint Rust Implication Audit trail Immutable records Arc, no mutation Precision No floating point rust_decimal Consistency Transaction boundaries Clear ownership Compliance Complete logging Structured tracing Reproducibility Deterministic execution No race conditions Critical Constraints Financial Precision RULE: Never use f64 for money WHY: Floating point loses precision RUST: Use rust_decimal::Decimal

Audit Requirements RULE: All transactions must be immutable and traceable WHY: Regulatory compliance, dispute resolution RUST: Arc for sharing, event sourcing pattern

Consistency RULE: Money can't disappear or appear WHY: Double-entry accounting principles RUST: Transaction types with validated totals

Trace Down ↓

From constraints to design (Layer 2):

"Need immutable transaction records" ↓ m09-domain: Model as Value Objects ↓ m01-ownership: Use Arc for shared immutable data

"Need precise decimal math" ↓ m05-type-driven: Newtype for Currency/Amount ↓ rust_decimal: Use Decimal type

"Need transaction boundaries" ↓ m12-lifecycle: RAII for transaction scope ↓ m09-domain: Aggregate boundaries

Key Crates Purpose Crate Decimal math rust_decimal Date/time chrono, time UUID uuid Serialization serde Validation validator Design Patterns Pattern Purpose Implementation Currency newtype Type safety struct Amount(Decimal); Transaction Atomic operations Event sourcing Audit log Traceability Structured logging with trace IDs Ledger Double-entry Debit/credit balance Code Pattern: Currency Type use rust_decimal::Decimal;

[derive(Clone, Debug, PartialEq)]

pub struct Amount { value: Decimal, currency: Currency, }

impl Amount { pub fn new(value: Decimal, currency: Currency) -> Self { Self { value, currency } }

pub fn add(&self, other: &Amount) -> Result<Amount, CurrencyMismatch> {
    if self.currency != other.currency {
        return Err(CurrencyMismatch);
    }
    Ok(Amount::new(self.value + other.value, self.currency))
}

}

Common Mistakes Mistake Domain Violation Fix Using f64 Precision loss rust_decimal Mutable transaction Audit trail broken Immutable + events String for amount No validation Validated newtype Silent overflow Money disappears Checked arithmetic Trace to Layer 1 Constraint Layer 2 Pattern Layer 1 Implementation Immutable records Event sourcing Arc, Clone Transaction scope Aggregate Owned children Precision Value Object rust_decimal newtype Thread-safe sharing Shared immutable Arc (not Rc) Related Skills When See Value Object design m09-domain Ownership for immutable m01-ownership Arc for sharing m02-resource Error handling m13-domain-error

返回排行榜