在Smalltalk中设计事务管理器

Designing a Transaction Manager in Smalltalk

本文关键字:事务 事务管理 管理器 Smalltalk      更新时间:2023-10-16

我正在帮助一位朋友用Smalltalk设计一个程序(以前从未用Smalltalk编码过,我只知道c++),在那里我需要从txt文件中读取事务并实现它。在某些情况下,我们可能会遇到不同的货币。在这种情况下,我需要从具有日期|currency1currenty2|currency 2current1汇率的表中获取货币汇率。所以我把我的课建模成这样:

  1. 读取事务的文件
  2. 对金额做加法或减法运算

在加或减的时候,可能会有不同的货币,比如加元、美元。因此,如果经常账户有美元,我可能需要使用运算符重载将加元转换为美元。

所以,我有一个基础类货币,衍生类加元&美元我的操作员超载看起来是这样的。

Currency& operator+(Currency& c) {
  local_var + c.to_canadian_dollar();
}
uint32 to_canadian_dollor() {
  return local_var * er.conversion_rate(); **<-- I need to pass date for the exchange rate function to get the exchange rate for today's date.**
}

问题是,我需要通过转换率的日期,但我不能通过运算符重载来通过日期。

其他人有更好的设计吗?或者闲聊中有什么语言功能可以让我在不打断链条的情况下度过约会?我可以通过在交易前设置日期来让设计看起来很难看。但只是好奇,如果有更好的设计我可以学习。

Smalltalk没有运算符重载。因为它没有运算符。在C++中,运算符和方法是不同的,但有点相似的实体。在Smalltalk中,你只需要一些方法。时期因此,当您在Smalltalk代码中看到"+"时,它不是运算符(因为它们在Smalltalk中不存在)。这是一个信息发送。左侧对象充当接收器,向其发送'+'方法,右侧对象作为唯一参数。

因此,可以定义一个新的数字对象,将您的日期动态数据封装在其中

你没有说你在使用哪种Smalltalk,但大多数风格都使用double dispatch模式来实现"数学感知"对象之间的超越数学。如果你对你的问题提供了更多的细节,也许我会通过这里的例子提供更多的细节。。。