2

再次:如果您投票 -1,请发表评论解释原因。这篇文章不是关于你是否同意这种方法,而是关于如何去做。

像许多架构师一样,我通过多年的经验开发了编码标准,我希望我的开发人员能够遵守这些标准。

对于那些认为三四年经验可以让你成为高级开发人员的人群来说,这尤其是一个问题。将其作为培训和代码审查问题处理的成功有限。

因此,我认为能够在构建过程中添加自定义编译时错误以更严格地执行我们的内部最佳实践和编码标准会很棒。

例如,我们为所有数据库访问使用存储过程,它提供过程级安全性、数据库封装(表结构对应用程序隐藏)和其他好处。(注意:我没有兴趣就此展开辩论。)一些开发人员更喜欢内联 SQL 或参数化查询,这很好 - 在他们自己的时间和自己的项目中。

我想要一种添加编译检查的方法,该检查可以找到任何看起来像的东西

string sql = "insert into some_table (col1,col2) values (@col1, @col2);"

并生成一个错误,或者在某些情况下,一个警告,带有类似的消息

Inline SQL and parametrized queries are not permitted.

或者,如果他们使用 var 关键字

var x = new MyClass();

Variable definitions must be explicitly typed.

Visual Studio 和 MSBuild 是否提供了添加此功能的方法?我在想我可以使用正则表达式来查找不可接受的代码并生成正确的错误,但我不确定从性能的角度来看,将其集成到构建过程中的最佳方法是什么。

我们可以添加构建前或构建后的步骤来运行自定义 EXE,但是如何返回特定于行和文件的错误?另外,我希望它在每个文件编译后运行,而不是在链接后运行。

正则表达式是执行此类模式匹配的最佳方式,还是我应该发疯并通过 C# 解析器运行代码,这将允许通过解析树进行节点级验证?

我会很感激以前经验的建议和故事。

评论 一些受访者指出,可以通过 db 权限限制用户运行除存储过程之外的任何内容的能力。但是,我们正在将一个 350k+ 行的应用程序从 ASP 3.0 移植到 ASP.NET MVC,并且现有的代码库非常依赖连接的 SQL,而新的东西都使用 Enterprise Library。我想我可以为具有更多限制性权限的 .NET 代码添加一个单独的 Web 用户帐户。

4

4 回答 4

1

为 Resharper 写一个插件怎么样?这是一个开始的教程:为 ReSharper 编写插件:未定义的第 1 部分

于 2010-05-30T17:47:07.060 回答
1

对于编码标准,我会考虑为 FxCop 或 StyleCop 编写自定义规则。我不认为 Regex 是适合这项工作的工具。

对于需要存储过程的特定情况 - 如果您确保应用程序无权在生产数据库上执行任何其他操作,那么每个人很快就会排队。

于 2010-05-30T17:47:36.327 回答
1

隐式输入 ( var x = ....) 是可以在 Visual Studio 中的项目级别关闭的功能。

另一个更棘手。您是否看过 FxCop,它是执行代码标准的工具。

于 2010-05-30T17:50:20.737 回答
0

只能使用存储过程的要求应该通过数据库权限来管理。反对使用 var 的规则对我来说似乎相当武断,我想不出一种方法来执行它。你有更多关于你的最佳实践的例子吗?

于 2010-05-30T17:53:53.627 回答