Php 架构:在开发/生产中使用不同的类

Php 架构:在开发/生产中使用不同的类,php,architecture,development-environment,production-environment,Php,Architecture,Development Environment,Production Environment,我对在两个不同的环境中使用两个不同的类感兴趣。这两个类应该共享相同的结构方法,但在生产中使用的方法将是轻量级的,具有更少的验证或更少的功能性或不同的操作 示例:不检查字段类型/存在性的SQL查询类。 另一个例子:一个错误处理类,它记录并且不显示消息 我假设一个特定的设计模式已经存在,但我真的不知道我应该研究哪一个。这可能就是我……但这是一个非常糟糕的想法 您不应该让未在开发/测试中运行的代码在现场运行。否则,除了将代码推入生产环境并交叉手指之外,无法验证代码是否正常工作 出于这个原因,我认为你不

我对在两个不同的环境中使用两个不同的类感兴趣。这两个类应该共享相同的结构方法,但在生产中使用的方法将是轻量级的,具有更少的验证或更少的功能性或不同的操作

示例:不检查字段类型/存在性的SQL查询类。 另一个例子:一个错误处理类,它记录并且不显示消息


我假设一个特定的设计模式已经存在,但我真的不知道我应该研究哪一个。

这可能就是我……但这是一个非常糟糕的想法

您不应该让未在开发/测试中运行的代码在现场运行。否则,除了将代码推入生产环境并交叉手指之外,无法验证代码是否正常工作

出于这个原因,我认为你不会找到一个很好的例子来说明你在寻找什么

更新


你所描述的和你原来的问题读起来略有不同。如果是这种情况,您可以让您的“框架”读取指定验证和日志记录级别的配置文件。这样,您的配置文件在不同的环境中可能会有所不同,并且仍然运行相同的代码库。

这可能只是我的问题……但这是一个非常糟糕的想法

您不应该让未在开发/测试中运行的代码在现场运行。否则,除了将代码推入生产环境并交叉手指之外,无法验证代码是否正常工作

出于这个原因,我认为你不会找到一个很好的例子来说明你在寻找什么

更新


你所描述的和你原来的问题读起来略有不同。如果是这种情况,您可以让您的“框架”读取指定验证和日志记录级别的配置文件。这样,您的配置文件可以在不同的环境中有所不同,并且仍然运行相同的代码库。

在不同的环境中使用不同的代码不是一个好主意

对于您的场景,我认为最好的选择是将您希望在特定环境中避免的事情外部化为配置方面,并在部署应用程序时设置详细的日志开/关、字段的健全性检查开/关等


必须以一致的方式对环境进行任何更改,以避免出现问题。版本控制系统和一致的构建和部署过程是您的朋友。

在不同的环境中使用不同的代码不是一个好主意

对于您的场景,我认为最好的选择是将您希望在特定环境中避免的事情外部化为配置方面,并在部署应用程序时设置详细的日志开/关、字段的健全性检查开/关等


必须以一致的方式对环境进行任何更改,以避免出现问题。版本控制系统和一致的构建和部署过程是您的朋友。

同意上面关于在生产和开发环境中不运行不同代码的大多数评论


也就是说,您可能正在寻找一种或模式。

同意上面关于在生产环境和开发环境中不运行不同代码的大多数评论


也就是说,您可能正在寻找一个或模式。

在我的例子中,我有一个带有沙箱和实时环境的支付网关。我所做的是使用一个模式+接口,这样所有网关都有相同的签名+配置,系统知道需要实例化什么类。在我的例子中,我有一个带有沙箱和实时环境的支付网关。我所做的是使用模式+接口,这样所有网关都具有相同的签名+配置,系统知道需要实例化哪个类

我想他看到的是您描述的另一面,即在dev/stage中运行但不在生产中运行的代码。不考虑+1,因为这仍然是个坏主意。事实是:代码首先在开发环境中运行,开发环境执行所有必要的验证。然后将代码推送到生产环境中。相同的代码。只是底层较轻,没有像开发部分那样记录太多的内容,也没有检查太多的内容。就像一个框架一样,有两种配置。对我来说这似乎没有错。PHP配置文件PHP.ini在开发/生产时也不一样。@savagman-这种情况与您最初的问题听起来有些不同。请参阅我更新的答案。我通过评论JuanZe的答案来回答。+1用于将差异转移到配置中,而不是硬编码到类中。我认为他看到的是您描述的代码的另一面,即在开发/阶段运行但不在生产中运行的代码。不管+1,因为这仍然是个坏主意。事实是:代码在开发环境中首先运行
执行所有必要验证的环境。然后将代码推送到生产环境中。相同的代码。只是底层较轻,没有像开发部分那样记录太多的内容,也没有检查太多的内容。就像一个框架一样,有两种配置。对我来说这似乎没有错。PHP配置文件PHP.ini在开发/生产时也不一样。@savagman-这种情况与您最初的问题听起来有些不同。请看我更新的答案。我通过评论JuanZe的答案来回答。+1用于将差异移动到配置中,而不是硬编码到类中。是的,我明白你的观点。我不会进行精神检查。亲爱的上帝!这不是可选功能。关键是运行同一代码库的两个版本,执行相同的强制操作,并在生产过程中省去其余部分。也就是说,能够检查生产中的所有内容也很有趣,但为此,我只需要使用另一个类。我最关心的是加载更少的代码和执行更少的检查,拥有一个可以快速阅读和理解的小代码。针对某些配置的验证只会使整个过程更加复杂。是的,我明白你的意思。我不会进行精神检查。亲爱的上帝!这不是可选功能。关键是运行同一代码库的两个版本,执行相同的强制操作,并在生产过程中省去其余部分。也就是说,能够检查生产中的所有内容也很有趣,但为此,我只需要使用另一个类。我最关心的是加载更少的代码和执行更少的检查,拥有一个可以快速阅读和理解的小代码。针对某些配置的验证只会重新增加整个过程的复杂性。