`
marlonyao
  • 浏览: 252825 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Visual Studio下使用Code Snippet

    博客分类:
  • .NET
阅读更多

现在项目中事务处理是在DAO中手工控制的,必须首先获得连接,开启事务,成功提交事务,失败回滚事务。典型的代码结构如下:

 

using (var conn = ConnectionManager)
{
	try
	{
		conn.BeginTransaction();	
	
		.... // excute SQL

		conn.Commit();
	}
	catch (Exception e)
	{
		conn.Rollback();
		throw e;
	}
}
 

我对此感到很不舒服,代码中真正有用的只是执行SQL,至于打开连接、处理事务等操作在每个方法中都是一样的,在每个方法中重复这样的代码是典型的bad smell,于是我在BaseDAO中添加了ExecuteInTransaction方法,它接收一个Action委托,Action委托来执行SQL。ExecuteInTransaction实现如下:

 

protected void ExecuteInTransaction(Action dbOp)
{
	using (var conn = ConnectionManager)
	{
		try
		{
			conn.BeginTransaction();

			dbOp.Invoke();

			conn.Commit();
		}
		catch (Exception e)
		{
			conn.Rollback();
			throw e;
		}
	}
}
 

这样封装之后,要执行数据库事务就简单多了,对于最开始的代码现在就可以写成:

 

ExecuteInTransaction( () => {
	... // excute SQL
});
 

我觉得这样改动挺好,也没和技术经理商量,技术经理发现之后,却勒令我改回来。他给我的理由是这样性能太差,为此他专门找了一篇MSDN上的文章(Writing Faster Managed Code: Know What Things Cost )来证明这一点。这是他的惯用手段,每次他说服我改动代码时都会来拿性能来说事。我很不屑于他的这一点,我觉得开发效率和减少BUG才是优先考虑要素,大师Donald E. Knuth早就说过过早优化是万恶之源。但我还是改了,我的理由是“给代码带来了不一致性”,毕竟我没有理由要别人将他们的代码也改成这样。我坦承我一旦觉得原有代码写得不好,就很容易引发“重构”的冲动,但是我又不能改动别人的代码,这样就导致整个项目代码的不一致了。不晓得大家有没有这样的冲动?

 

到目前为止,我似乎说的是无关主题的废话,但别急,我马上就要进入正题了。既然要改代码,复制/粘贴是任何人都会用的方法,但我不想这样做。我改动的地方只有五六处,不多,可能复制/粘贴的速度会更快,但于我的技能却不会有任何提高,我喜欢有技术含量的偷懒。我早知道Visual Studio下有Code Snippet功能,可以自定义代码模板,但从来没有使用过,这次是个好机会。

 

 

第一步是选择模板目录,从菜单选择Tools -> Code Snippets Manager...,或者使用快捷键C+K,C+B。VS(Visual Studio)默认带有My Code Snippets目录,可以将自定义的代码模板放在其下,实际目录是Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets。要添加一个新的模板目录,只需要点击"Add..."按钮,然后选择目录就可以了。我添加了一个叫做VS_CodeSnippet的模板目录。如图:

 

 

 

第二步就是创建代码模板。凡是在模板目录下文件名以.snippet结尾的文件都会认为是代码模板,代码模板是XML格式,需要遵守一定的格式规范。代码模板主要分为三部分,描述信息、变量声明和模板定义。描述信息置于Header部分,最重要的是Shortcut信息,当在VS中输入这个Shortcut,然后再按Tab键,就会用模板的内容来替换Shortcut。我这个模板的Shortcut定义为dao_execute_in_transaction。变量声明置于Snippet的Declarations下,我只定义了一个变量,取名为DBOperation。模板定义置于Snippet的Code下,模板中通过$TempVar$的形式来引用模板变量。以下是我这个模板的完整代码:

 

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>dao_execute_in_transaction</Title>
			<Shortcut>dao_execute_in_transaction</Shortcut>
			<Description>Code snippet for execute sql in transaction</Description>
			<Author>Marlon Yao</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>DBOperation</ID>
					<Default>sql</Default>
					<ToolTip>Transaction Code</ToolTip>
				</Literal>
			</Declarations>
			<Code Language="csharp"><![CDATA[using (var conn = ConnectionManager)
            {
                try
                {
                    conn.BeginTransaction();
                    ExecuteNonQuery($DBOperation$);
                    conn.Commit();
                }
                catch (Exception e)
                {
                    conn.Rollback();
                    throw e;
                }
            }]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

 

我只用很少的功能,写时可以参考VS自带的模板。

 

 

最后就是使用代码模板。使用起来很简单,只需要输入代码模板中定义的Shortcut,对于我这个模板来说就是,dao_execute_in_transaction,输入时VS会自动给予提示(也可以手动键入C+K,C+W来补全)。

 

 

输入dao_execute_in_transaction,然后按Tab键,就会将dao_execute_in_transaction替换成模板内容,并且光标定位在第一个模板变量处。

 

 

如果定义了多个模板变量,按Tab键可以切换到下一个模板变量处,最后按Enter键进入正常编辑模式。

 

定义好代码模板之后,修改起来就简单多了,最重要的是它还可以在以后的编程中用到。我仍旧不喜欢这种代码重复的方式,但这却不是我要并且能关心的事。VS的Code Snippets功能很强大,我只使用很小一部分功能,但也却足以应付大部分情况了,对于它的高级功能等到碰到问题时再去了解。

分享到:
评论

相关推荐

    visual studio code snippet editor

    "Visual Studio Code snippet editor" 提到的是一个专门用于创建和管理VS Code代码片段(snippets)的工具。代码片段是预定义的代码模板,可以帮助开发者快速输入常见的代码结构,提高编程效率。 在VS Code中,用户...

    c#代码段编辑 Snippy - Visual Studio Code Snippet Editor

    Snippy-Visual Studio Code Snippets Editor c#代码段编辑 Snippy - Visual Studio Code Snippet Editor

    Snippy-Visual Studio Code Snippet Editor for C#

    **Snippy:Visual Studio Code 的 C# 代码片段编辑器** Snippy 是一款专为 Visual Studio Code 用户设计的高效 C# 代码片段编辑工具。它极大地提升了开发人员编写和管理自定义代码片段的效率,特别是在涉及到 C# ...

    Snippy-Visual Studio Code Snippet Editor for C# 源代码

    Snippy是一款专为C#开发者设计的Visual Studio Code插件,用于创建和管理代码片段。这个源代码包提供了Snippy编辑器的完整实现,让程序员能够高效地自定义和组织他们的代码片段,提升开发效率。在深入理解Snippy之前...

    Visual Studio 2005 Code Snippets下载

    - 保存为`.snippet`文件,将其复制到Visual Studio的代码片段目录(通常是`%USERPROFILE%\Documents\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets`)。 - 重新启动Visual Studio,新创建的代码...

    Visual Studio C# 代码段

    Visual Studio C# 代码段,可以直接使用的代码段模块,而不是编辑代码段的工具. &lt;CodeSnippet Format="1.0.0"&gt; &lt;Header&gt; &lt;Title&gt;simple singleton&lt;/Title&gt; &lt;Shortcut&gt;sngltn &lt;Author&gt;Matias ...

    Visual Studio 2008 可扩展性开发2:Macro和Add-In初探

    Visual Studio 2008 提供了多种方式来扩展其功能,包括 Macro、Add-In、VsPackage、VS Shell、Domain Specific Language Tool、Visualizer、Code Snippet、Project/Item Template、MSBuild 等。这些扩展方式可以帮助...

    Visual Studio 2005.net 代码段(Snippet)丢失的解决方案

    解决这一问题的第一步是确保代码段管理器(CodeSnippetManager)已启用并可见。这一步骤相对简单,但却是解决问题的关键。 1. **打开工具菜单**:首先,在Visual Studio的主界面中,找到“工具”(Tools)菜单并...

    Visual Studio 2010 操作技巧系列:常用功能心得笔记

    1. **最近使用的项目管理**:在Visual Studio 2008中,用户无法直接管理“最近使用的项目”列表,需要额外安装PowerCommands扩展来实现。但在Visual Studio 2010中,这一功能得到了显著改进。用户可以直接在启动页上...

    用C#代码段,提高工作效率(C# code snippet)

    &lt;CodeSnippet Format="1.0.0"&gt; &lt;Title&gt;Log Info &lt;Shortcut&gt;loginfo &lt;Description&gt;Inserts a log information statement. &lt;Author&gt;Your Name &lt;SnippetType&gt;Expansion &lt;Snippet&gt; &lt;ID&gt;message ...

    PowerCommands for Visual Studio 2008

    To email the lines of text you select in the code editor, right-click anywhere in the editor and then click Email CodeSnippet. Insert Guid Attribute This command adds a Guid attribute to a selected ...

    snippet辅助设计

    Visual Studio (VS) 提供了一项强大的功能——Code Snippets(代码片段),可以帮助开发者快速输入常用或复杂的代码结构,从而节省编写时间并减少出错的可能性。"snippet辅助设计" 主题正是围绕如何利用VS中的Code ...

    VS2008 IDE 安装和使用C# Code Snippets

    2. **嵌套使用**:一个Code Snippet可以包含其他Code Snippet,实现更复杂的代码结构。 3. **版本控制**:Code Snippets可以纳入版本控制系统,方便团队共享和更新。 总结来说,VS2008的Code Snippets是提升开发...

    bootstrap5-snippets:适用于Visual Studio代码的Bootstrap 5代码段

    适用于Visual Studio Code的Bootstrap 5片段该扩展提供了Bootstrap 5片段版本文献资料要求Bootstrap Version : 5.0安装启动代码的命令面板ext install adereksisusanto.bootstrap5-snippets片段入门模板命令 : b5-...

    编辑C# code snippets 的工具 snippy

    5. **集成于IDE**:虽然描述中提到的是“安装版”,但Snippy通常会与常见的C#开发环境(如Visual Studio、Visual Studio Code等)进行集成,使得其功能无缝融入开发流程。 6. **版本控制**:对于团队开发,Snippy...

    vscode-playwright-snippets:Visual一个Visual Studio Code扩展,它为Playwright添加了预定义的有用代码段

    此Visual Studio Code扩展为添加了预定义的有用代码段。 查看以获取有关可用功能的更多信息。 :school:如何使用 您需要做的第一件事是安装。 基本上,有两种方法可以应用摘要: 1.直接输入 开始输入前缀或只是...

    vscode-atom-javascript-snippet:适用于Visual Studio代码的Atom JavaScript代码段

    JavaScript是Web开发中不可或缺的编程语言,而Visual Studio Code(VSCode)和Atom都是流行的代码编辑器,提供了丰富的功能和扩展来提升开发者的效率。"vscode-atom-javascript-snippet"是一个专为VSCode设计的插件...

    python-snippets:适用于Visual Studio Code的Python代码段

    Python片段 Python代码片段集合。 最初是从PyCharm,TextMate,SublimeText和其他编辑器/ IDE移植的。 如果您想贡献,请随时 谢谢! 特征 基本片段 缩写 描述 环保 #!/ usr / bin / env python ...从......ifmain

    AutoCADSnippet vb.net 开发用代码片段

    C:\Users\【你的用户名字】\Documents\Visual Studio 2015\Code Snippets\Visual Basic\My Code Snippets 里面 或者 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VB\Snippets\2052 (Program Files (x86)\...

    C# Snippet.zip

    代码片段是Visual Studio等IDE提供的一种功能,允许开发者预先定义一段代码模板,当需要使用时,只需输入特定的触发词,然后通过Tab键就能自动完成代码的插入。这对于编写常见的代码结构如类定义、方法、属性等尤其...

Global site tag (gtag.js) - Google Analytics