【问题标题】:Rehash: Accounting Software Design PatternsRehash:会计软件设计模式
【发布时间】:2009-03-22 00:16:24
【问题描述】:

早在 10 月份,Kristopher Johnson 就曾询问过 Accounting Software Design Patterns

他收到了几个答案,但都基本相同,指向Martin Fowlers Accounting Patterns

我真的不觉得 Fowlers 模式很有用。对于更简单的会计系统,它们似乎过于复杂,因此我正在重新讨论 Kristopher 的问题并寻找更多选项,最好是针对较小的系统。

这将主要是一个基于现金的系统,其中为用户提供类似于银行的帐户。他们可以登录(基于网络)并检查余额、进行某些交易等。

我想它更像是 Paypal 或信用卡公司,而不是银行,但规模更小。它不必处理税收、摊销或您在完整的会计系统中看到的任何事情。只是余额和交易。

那么任何人都可以指出基于会计的软件设计甚至是简单会计系统的良好实施的任何其他资源吗?

【问题讨论】:

    标签: design-patterns accounting


    【解决方案1】:

    Fowler 的模式并不过于复杂。他们是关于什么是需要的。如果不与最终用户或会计师发生麻烦,您不太可能能够构建更简单的东西。

    【讨论】:

      【解决方案2】:

      那么任何人都可以指出基于会计的软件设计甚至是简单会计系统的良好实施的任何其他资源吗?

      Free Digital Money Project 看起来对您的需求很有帮助。它提供了一个基本的交易和平衡框架。它故意简单而抽象,因此可以提供有用的设计见解,特别是如果您想测试新颖的想法。

      Cyclos更实用。它涵盖了用户帐户和交易。

      MyBanco 是另一个开源银行系统,支持用户银行账户和基于 Web 的访问。它可以与虚拟货币和真实货币一起使用。

      所有这些都是开源的,因此您可以直接查看文档、架构和代码。

      顺便说一句,如果你真的只对余额和交易感兴趣,那么听起来任何与声誉、业力或积分系统相关的模式或项目都可能有相关的重叠......

      【讨论】:

      • 无法再访问免费数字货币项目网站。
      • MyBanco 链接也不起作用。 Cyclos 现在指向一个带有产品的商业网站。
      【解决方案3】:

      当我实施会计时,它是日记帐、交易和帐户以及帐户类型的典型模型。

      tblTransactions
          - Amount
          - AccountID1
          - AccountID2
          - Type [CR/DR]
          - DateEntered
      

      然后我还有一个tblJournals,它根据明显的基础对交易进行分组。您还可以添加 JournalTypes,它包含对期刊类型的一般描述,因此您可以检测到好东西(reverals 等)。

      这很好,因为在这个模型下的逆转是微不足道的。您可以为您的日志收集所有交易,然后交换类型。

      tblTransactions 有一个触发器,该触发器根据类型更新针对特定帐户的“CalculatedBalance”。然后,您还可以在给定的时间段内生成报告,等等。

      实现这一点不需要太多的会计知识,而且简单而有效。

      【讨论】:

      • 我的会计知识几乎为零,所以即使是“期刊”对我来说也是一个陌生的概念。我了解软件中的日志是什么,通常是文件系统(在发生故障时可以重放的事务日志)......我认为日志与此有一些类似之处。
      • 日记只是一系列交易的指针,还有一些附加信息。所以它可能包含日期、描述和“类型”。类型是指所有底层交易正在做什么。退款,无论如何(你可以在你的系统环境中弥补)。您可以通过像“tblJournalTransactions”这样的表来映射它们(许多交易到一个期刊)。
      【解决方案4】:

      Google search for "two phase commit"

      本身不是设计模式,但您需要确保像这样的操作 “将 $amount 从 $account1 转移到 $account2” 在没有匹配的“存款”的情况下,不要永远“提款”......即如果在“存款”完成,“提款”回滚(撤消)

      可提交事务由可撤销(可回滚)子事务组成...

      1. 获取所需的权限:微不足道的拒绝,“不足 资金”
      2. 开始“两阶段提交”
      3. 添加子交易
      4. 提交或回滚

      警告:发明 BCD 数学是为了防止 Base 10 数学中的舍入错误。你没有提到国际问题,但你需要定点或“大精度”数学、货币换算等等……

      【讨论】:

        【解决方案5】:

        将钱存储为美分(整数)而不是美元(浮点数)。这不是设计,但它可能更有用。

        【讨论】:

        • 我目前不关心实现细节。我想要设计模式。
        • int 是一场等待发生的灾难。为什么不使用十进制数据类型呢? int for money 不仅是混淆 - 你持有多少小数位。除非您总是四舍五入到整分,否则您将需要某种因子来除以得到小数位。当您将货币更改为日元、英镑、欧元时会发生什么。
        猜你喜欢
        • 2010-09-14
        • 2023-03-29
        • 1970-01-01
        • 2013-04-25
        • 2018-07-13
        • 2011-01-08
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        相关资源
        最近更新 更多