在两个 NodeJS 微服务之间共享自定义代码

2024-04-05

我正在为该应用程序创建 Web 应用程序和微服务,并且两者都需要使用 Sequelize 创建相同的数据库模型。使用 NodeJS 处理此任务的方法是什么?

我正在考虑创建我的数据库模型的单独模块并将其保存在私有 git 中,并将此私有 git 作为 npm 依赖项添加到我的 Web 应用程序和微服务中。

但我想知道这是正确的方法还是在几个微服务之间分离共享私有模块的正确方法是什么,在我的例子中它是数据库模型? 我应该选择 DRY 还是不选择?

提前致谢!


关于微服务,没有规定代码不应该重用。事实上,指出微服务的 DRY 总体上是错误的是危险的。相反,您应该问以下问题:Will the shared code be a separate module with a dedicated purpose that rectifies a separately managed lifecycle and releases?如果是,您绝对应该将其作为单独发布的模块重用 - 类似于重用任何第三方库的方式。这可确保共享代码和微服务之间不会存在强耦合,因为每个微服务团队都可以自行决定是否要保留模块的特定发行版本或升级到较新的版本。您想要避免的是当重用库发生变化时迫使您更改微服务的依赖关系(避免连锁反应)。

另一件事 - 因为您提到它是与数据库相关的模式,所以您必须问另一个问题:Will the schemas being reused in separate DBs or will they refer to the same physical DB in the end?。如果它们最终使用共享数据库,那么您就有效地紧密耦合了两个微服务,因此它们可能应该被视为同一服务的一部分,而不是单独的。

我觉得这就是我在不了解更多关于您的服务和目标的情况下所能说的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个 NodeJS 微服务之间共享自定义代码 的相关文章

随机推荐

  • 如何在 python 中检查我是否处于一天中的特定时间范围内?

    我想在 python 中检查当前时间是否在两个端点之间 例如上午 8 30 和下午 3 00 无论实际日期如何 就像这样 我不在乎完整的日期是什么 只是那个小时 当我创建时datetime对象使用strptime为了指定时间 它输入了一个虚
  • 正在调用 Swift deinit,但对象仍未解除分配

    在 swift 中 我得到 deinit 函数来打印一行 说明该对象已被初始化 但该对象仍然在仪器分配工具中报告为活动状态 我认为这是不可能的 有没有办法找出为什么它没有被释放 或者有没有办法找出哪些子对象可能会阻碍它 Update 对于
  • 删除 Ruby 中连字符周围的空格

    我有下一个字符串 foo bar foo 酒吧 foo bar foo 酒吧 foo bar baz foo bar baz foo bar baz etc 红宝石中使它们全部没有连字符周围空格的最佳方法是什么 单词之间应保留不带连字符的空
  • C# - 如何从 static void main 调用方法

    我在 static void main 中有一些代码 尽管我希望它从 static void main 调用 startremdup 方法 因为它使用适当的参数调用RemoveDuplicate 但我尝试过 startremdup priv
  • TSQL 搜索文本

    我有以下情况 declare vendor as table vName varchar max insert into vendor select from values Maccro Accro t one declare transa
  • 表达式树的实际使用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 表达式树是一个很好的功能 但它的实际用途是什么 它们可以用于某种代码生成或元编程等吗 正如乔恩所说 我用它们来提供通用运算符 http
  • 在 Clang 中以可移植且最佳的方式将 uint64_t 转换为字节数组

    如果你想转换uint64 t to a uint8 t 8 小端 在小端架构上你可以做一个丑陋的reinterpret cast lt gt or memcpy e g void from memcpy const std uint64 t
  • 在 Woocommerce 中将 Avada Catalog 排序挂钩覆盖回默认值

    我正在尝试通过将以下代码添加到 Avada child 来修改 Woocommerce 排序选项以获得自定义排序选项function php file add custom sorting option add filter woocomm
  • 检查字母数字字符并从 HTML 表单获取输入

    我对 Perl 编程相当陌生 有几个似乎无法解决的编译问题 我的程序从这个 HTML 表单获取输入 问题 我的表单应该使用 post 方法还是 get 方法
  • 使用VS2008和Office2007将Excel转换为PDF

    我正在尝试使用 Interop Excell 将 Excel 工作簿另存为 PDF 文件 我使用的是VS2008和Office2007 并从Microsoft下载并安装了SaveAsPDFandXPS exe 这使我能够使用以下代码将 Wo
  • 如何反序列化包含无效字段名称的 JSON 对象

    我有一个 JSON 请求 其结构如下 formats flash embed http a3 vikiassets com assets vikiplayer 922746a667cfd38137a7e45df6ba1b95 swf aut
  • 密钥库操作失败:填充模式不兼容

    我正在使用 AndroidKeystore 生成 RSA 密钥对并使用该密钥对进行加密和解密 我的密钥对生成代码如下所示 var keypairGen KeyPairGenerator KeyPairGenerator getInstanc
  • CSS3“曲面”3D 变换/透视帮助

    我正在尝试为我的网站创建一种有观点的人群 它实际上是一个充满平面图像的 ul 我想创建一种 弯曲 的感觉 就像圆形的人群一样 它向内并且向内明显变小 并向末端弯曲 海报圈的例子是我能找到的最接近的http www webkit org bl
  • 如何从java通过hdfs协议访问hadoop?

    我找到了一种通过以下方式连接到hadoop的方法hftp 并且工作正常 只读 uri hftp 172 16 xxx xxx 50070 System out println uri uri Configuration conf new C
  • 如何检查 Bash 中是否存在某些文件?

    In a bash脚本 我必须检查多个文件是否存在 我知道一种尴尬的方法 如下所示 但这意味着我的主程序必须位于那个丑陋的嵌套结构中 if f FILE1 then if f FILE2 then echo OK MAIN PROGRAM
  • Python: type(i) 是 int...但 i 是 int = False

    我很确定我在做一些愚蠢的事情 但不知道那是什么 predict fn abc data In 3 predict Out 3 array 2 In 4 type predict Out 4 numpy ndarray 现在用以下内容包装我的
  • 当父div在屏幕上不可见时,jQuery UI位置函数问题

    我在 jQuery UI Position 函数方面遇到了一个奇怪的问题 有一个父 div 大于屏幕高度 其中还有另一个小 div 我的函数告诉小 div 位于其父级的底部 当底部可见时 一切正常 但是当由于窗口大小而导致底部不可见时 位置
  • Java 中函数指针最接近的替代品是什么?

    我有一个大约十行代码的方法 我想创建更多的方法来完成完全相同的事情 除了将更改一行代码的小计算之外 这是一个完美的应用程序 用于传递函数指针来替换该行 但 Java 没有函数指针 我最好的选择是什么 匿名内部类 假设你想要一个带有 a 的函
  • 使用node-sass查看所有子目录

    我见过很多使用以下命令观看特定文件夹的示例node sass 但我的 css 并不都在同一个文件夹中 我想让它像你一样监视所有子目录中的 scss 文件onchange 仅举个例子 我假设语法类似于 node sass w app scss
  • 在两个 NodeJS 微服务之间共享自定义代码

    我正在为该应用程序创建 Web 应用程序和微服务 并且两者都需要使用 Sequelize 创建相同的数据库模型 使用 NodeJS 处理此任务的方法是什么 我正在考虑创建我的数据库模型的单独模块并将其保存在私有 git 中 并将此私有 gi