为什么大多数框架(至少在PHP中)。在其他语言中,我也认为)使用环境变量设置相应的配置参数,然后通过配置对象/函数(例如config('mysql.passqord')或$ config ->get('mysql.password') )访问该值。我不会争论环境变量是好的还是坏的。假设我们决定在环境变量中放置一些配置值。在您需要的代码的任何位置直接读取环境变量(例如env('MYSQL_PASSWORD') )有什么问题?
我们只是想有一种统一的方式来访问所有的配置参数吗?还有其他更重要的原因吗?
发布于 2021-11-18 20:40:07
这是因为代码的其余部分应该依赖抽象--不管配置来自env变量、数据库、文件还是魔术球。这是因为封装-代码和运行时环境之间的依赖被封装在config类中。
发布于 2021-11-20 01:08:46
对于服务器端代码,在启动时读取所有环境变量可以通过拒绝启动或设置默认值来检测缺少的变量。否则,当实际使用环境变量时,您的代码可能稍后会失败,或者在多个地方重复使用默认设置代码。
发布于 2021-11-20 01:23:51
最好在代码中的一个位置读取所有配置。在多个地方阅读是一条通往疯狂的道路。如果您这样做,那么当您的代码增长到超过几个屏幕长度时,调试和文档化配置参数就会变得非常困难。
此外,环境变量是一种安全风险,并不是说您不应该使用它们,而是应该在使用之前对它们进行消毒,以确保它们中没有可能导致安全问题或意外崩溃的坏数据。如果你把它们读遍了整个地方,你将不得不重复每个地方的卫生设施,并冒着忘记在其中一些地方这样做的危险。
另外,如果以后决定以不同的方式配置它,又会怎样呢?如果你把它都放在一个地方,它就是一个要修改的地方。如果它是分散的,您将复制配置代码并在多个地方修复它。
它只是一个更干净、更易读、更安全、更易于维护的设计来读取配置,特别是外部(用户提供的)参数,比如环境变量,都在一个地方。
唯一反对这一观点的理由是,如果代码很短(比如,一个满是代码的屏幕),而且您非常肯定它永远不会变大,那么组织代码在一个地方仔细读取所有参数的开销可能是不值得的。
https://softwareengineering.stackexchange.com/questions/433636
复制相似问题