2013-07-16 165 views
2

作为分离生产环境和开发环境的最佳实践,您会推荐什么,但是从代码本身的角度来看。区分生产和开发环境

示例:想象使用Active Directory的应用程序,该应用程序应仅基于域控制器进行身份验证,而不考虑Windows中的本地用户和组设置。 对于生产环境,代码应忽略本地用户和组,以避免出现安全漏洞。对于开发环境(开发机器,构建机器...),应该允许这些本地设置更容易开发/测试(可以说为测试设置域控制器有点昂贵,并且本地组参与可以很容易地进行更改,以便开发人员可以测试不同的测试用例)。

我在这里陈述的具体例子并不重要,因为任何类似的应该在实际生产中启用/禁用的情况可能发生的情况是重要的。另外,请记住,我不是在讨论为应用程序提供不同的配置文件,因此开发环境的设置应该以某种方式完全隐藏,因为这会导致一些非常严重的安全问题)。

+1

我建议使用编译器指令(#if ... #endif)的丑陋但安全的想法,并为开发/生产构建使用适当的编译符号。 –

+0

在我的场景中,我有一个web.config文件和两个转换文件,一个用于发布,一个用于调试。在调试文件内部,认证模式被设置为表单,在发布文件中,它被设置为windows认证。 – gustavodidomenico

+0

你可以检查身份验证模式:http://stackoverflow.com/questions/91831/detecting-web-config-authentication-mode – gustavodidomenico

回答

1

一个明显的选择将是通过IoC pattern - 这样一来,可以替代真实身份验证的模拟一个,在适当时候这样做(同样,使用真实的,根据需要)

+0

是的,但是在哪里配置(注册)我们想要使用哪个实现;我的意思是在这种情况下如何区分生产和发展环境? –

+1

为什么不在你的app.config中定义它?没有必要将包含“开发者使用”模块的程序集部署到您的客户。 –