【问题标题】:How to apply OO design patterns in a NodeJS project?如何在 NodeJS 项目中应用 OO 设计模式?
【发布时间】:2017-10-28 14:38:14
【问题描述】:

我正在 NodeJS 中做一个关于财务控制的项目,该项目使用具有一些“私有”属性(_id_name_parent_balance 和 @987654325)的帐户(类帐户)模型@) 和一些方法(getter 和 setter 以及其他方法)。

所有创建的帐户(对象)都转换为 JSON 并存储到文件(自定义数据库)中,但它们的方法除外(只有属性传递给 JSON)。

当我加载数据库文件时,我得到了包含所有帐户及其属性的 JSON,并且需要使用 EJS 引擎将它们显示到视图页面中。

但是在转换成 JSON 并加载它们之后,它们不再有获取私有属性的方法,而且我想不出任何方法来获取这些信息,除非直接使用属性引用(如 _id_name, ...)。

如何根据 OO 设计模式获取这些属性,避免对类的私有属性进行外部引用?

谢谢!

【问题讨论】:

  • 让这些类型处理自己的 JSON 序列化和反序列化。
  • JSON 是一种表示法,它不能存储函数或对象方法。使用 JSON 存储数据,而不是序列化复杂对象。

标签: javascript json node.js oop design-patterns


【解决方案1】:

在你开始之前:我不推荐将 node.js 用于金融项目。

JavaScript Number 类型是 IEEE 754 浮点格式的实现,这种数字表示不足以处理财务信息。

请同时参考以下文章: Why not use Double or Float to represent currency?

一些解决方法包括使用Int32 创建类型化数组,然后将美分而不是美元存储到其中,但这仍然不够好,原因有很多(您有时会读取这些美分,隐式地将它们转换为浮点数操纵它们)。

我建议您使用支持定点数的语言(例如:C# decimal 或 Java 的 BigDecimal),除非您想承担巨大的财务和法律责任。

有实现BigDecimal 的 npm 模块,但在使用它们之前我会非常仔细地测试它们。此外,它们需要更多的工作和计算资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2011-03-03
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多