最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

关于Bob叔叔的依赖关系和Node.js的干净架构反转

IT培训 admin 10浏览 0评论

关于Bob叔叔的依赖关系和Node.js的干净架构反转

我目前正在阅读Bob叔叔的《清洁建筑》一书。到目前为止,这是一本令人惊叹的书,对我来说是很多学习的东西,但是有些东西我没掌握。

依赖关系对像Node.js这样的脚本语言的依赖性如何相关

根据我的理解,依赖关系的倒置允许较低级别代码的更改对高层代码没有影响,只要接口得以保留。反过来,这使得无需重新编译整个应用程序即可部署模块。

但是在Node.js中,无论我是导入数据库实现模块还是在应用程序层中导入它的接口,例如,如果我的数据库架构发生了变化,那么我仍然必须更改该数据库实现模块文件并重新部署整个应用程序。

我想念什么吗?

回答如下:

免责声明:我将排除此答案的打字稿,仅讨论动态javascript

Node js是一种解释语言,没有编译,因此它的运行时不同于Java,C#等已编译语言。

另一个非常重要的区别是javascript是一种弱类型语言,因此,与编译的强类型语言不同,您将遇到的大多数错误都是在运行时发生的。

已编译的强类型语言需要您所使用的事物是什么(类,接口,方法参数等)及其在编译时的外观的知识。

动态脚本语言没有这个问题。在那里,您看到的是运行时,如果不是,则会检查您调用的对象(例如函数)是否抛出错误。

话虽这么说,在Node中,您进行更改时不必重新编译应用程序,但是您确实需要重新部署新更改。

在编译语言中,您确实需要重新编译受更改影响的应用程序的特定部分,并且还要部署该更改,因此都需要重新部署,但是也需要重新编译。

通常,这些应用程序划分为单独的二进制文件,有些是库,有些是可执行文件,因此您只需要重新编译二进制文件的一个子集。

在编译语言和解释语言中,当您更改部分代码时,依赖于它的其他部分将受到更改的影响。现在,您想要的是最小化将影响代码的哪一部分。

重新部署时,您确实需要重新启动执行应用程序的过程。在Node中,您需要重新启动它,以便它将开始运行您的新代码。

在编译语言中,您需要重新启动可执行文件,以便它将运行您的新代码,因此几乎相同。

两种解释和编译语言都具有可动态加载仅文本文件的库(dll)或javascript模块的机制,因此无需重新启动该过程。

只是因为您没有像Java或C#中那样在Javascript中没有显式接口,这并不意味着您不是绑定并依赖于接口。如果您的代码在对象上调用了一个函数,则此代码expects该函数将在那里,因此它是对象接口的一部分。您可以更改此函数的实现,而不必更改调用代码,因为它取决于函数的名称和参数,而不取决于实现。

依赖关系反转也可以应用于Node,只是您具有implicit接口而不是显式定义的接口。您只需要考虑抽象性,并以不与任何实现细节绑定的方式定义接口。

如果更改接口,则实现和客户端代码都会受到影响。如果仅更改实现,则该接口的客户端不受影响。不论这种情况是否发生在编译时,这都适用于弱类型语言和强类型语言。

您是否需要重新编译是特定于该语言的,是否无需重新启动进程即可重新部署是另一回事。最大的问题是“您将更改什么,接口或实现?”

您为数据库提供的示例需要更多有关更改的详细信息。您的架构可能会发生变化,而不会影响接口,只会影响实现。它可能会更改,因为对应用程序其余部分进行了重大更改,这将影响到应用程序的某些部分。

如果仅更改实现,而不更改接口(函数名称,定义等),则仅更改DB模块,因此不影响更高级别的代码。依赖性反转有效,并且更高级别的代码不受影响。

的确,使用具有显式接口的C#和Java语言更容易理解它,还涉及另一个步骤,即编译。用javascript中的[[implicit interfaces很难想象同一件事,但是在抽象级别上,它是相同的,只是机制不同。在两种类型的语言中,如果您更改界面,代码都将中断,就可以了。

这就是为什么您应该定义抽象和接口并将其更改控制在控制之下,因此您的代码不会中断。当然,接口也需要改变。当他们这样做时,您需要更新客户端代码。这也适用于两种类型的语言。

关于Bob叔叔的依赖关系和Node.js的干净架构反转

我目前正在阅读Bob叔叔的《清洁建筑》一书。到目前为止,这是一本令人惊叹的书,对我来说是很多学习的东西,但是有些东西我没掌握。

依赖关系对像Node.js这样的脚本语言的依赖性如何相关

根据我的理解,依赖关系的倒置允许较低级别代码的更改对高层代码没有影响,只要接口得以保留。反过来,这使得无需重新编译整个应用程序即可部署模块。

但是在Node.js中,无论我是导入数据库实现模块还是在应用程序层中导入它的接口,例如,如果我的数据库架构发生了变化,那么我仍然必须更改该数据库实现模块文件并重新部署整个应用程序。

我想念什么吗?

回答如下:

免责声明:我将排除此答案的打字稿,仅讨论动态javascript

Node js是一种解释语言,没有编译,因此它的运行时不同于Java,C#等已编译语言。

另一个非常重要的区别是javascript是一种弱类型语言,因此,与编译的强类型语言不同,您将遇到的大多数错误都是在运行时发生的。

已编译的强类型语言需要您所使用的事物是什么(类,接口,方法参数等)及其在编译时的外观的知识。

动态脚本语言没有这个问题。在那里,您看到的是运行时,如果不是,则会检查您调用的对象(例如函数)是否抛出错误。

话虽这么说,在Node中,您进行更改时不必重新编译应用程序,但是您确实需要重新部署新更改。

在编译语言中,您确实需要重新编译受更改影响的应用程序的特定部分,并且还要部署该更改,因此都需要重新部署,但是也需要重新编译。

通常,这些应用程序划分为单独的二进制文件,有些是库,有些是可执行文件,因此您只需要重新编译二进制文件的一个子集。

在编译语言和解释语言中,当您更改部分代码时,依赖于它的其他部分将受到更改的影响。现在,您想要的是最小化将影响代码的哪一部分。

重新部署时,您确实需要重新启动执行应用程序的过程。在Node中,您需要重新启动它,以便它将开始运行您的新代码。

在编译语言中,您需要重新启动可执行文件,以便它将运行您的新代码,因此几乎相同。

两种解释和编译语言都具有可动态加载仅文本文件的库(dll)或javascript模块的机制,因此无需重新启动该过程。

只是因为您没有像Java或C#中那样在Javascript中没有显式接口,这并不意味着您不是绑定并依赖于接口。如果您的代码在对象上调用了一个函数,则此代码expects该函数将在那里,因此它是对象接口的一部分。您可以更改此函数的实现,而不必更改调用代码,因为它取决于函数的名称和参数,而不取决于实现。

依赖关系反转也可以应用于Node,只是您具有implicit接口而不是显式定义的接口。您只需要考虑抽象性,并以不与任何实现细节绑定的方式定义接口。

如果更改接口,则实现和客户端代码都会受到影响。如果仅更改实现,则该接口的客户端不受影响。不论这种情况是否发生在编译时,这都适用于弱类型语言和强类型语言。

您是否需要重新编译是特定于该语言的,是否无需重新启动进程即可重新部署是另一回事。最大的问题是“您将更改什么,接口或实现?”

您为数据库提供的示例需要更多有关更改的详细信息。您的架构可能会发生变化,而不会影响接口,只会影响实现。它可能会更改,因为对应用程序其余部分进行了重大更改,这将影响到应用程序的某些部分。

如果仅更改实现,而不更改接口(函数名称,定义等),则仅更改DB模块,因此不影响更高级别的代码。依赖性反转有效,并且更高级别的代码不受影响。

的确,使用具有显式接口的C#和Java语言更容易理解它,还涉及另一个步骤,即编译。用javascript中的[[implicit interfaces很难想象同一件事,但是在抽象级别上,它是相同的,只是机制不同。在两种类型的语言中,如果您更改界面,代码都将中断,就可以了。

这就是为什么您应该定义抽象和接口并将其更改控制在控制之下,因此您的代码不会中断。当然,接口也需要改变。当他们这样做时,您需要更新客户端代码。这也适用于两种类型的语言。
发布评论

评论列表 (0)

  1. 暂无评论