构建ASP.NET应用程序 - 最佳实践

时间:2009-11-06 16:27:47

标签: asp.net

我们正在构建一个ASP.NET应用程序,并希望遵循最佳实践。一些最佳实践是:


服务器端代码:

  • 使用catch块来捕获&记录低级错误。
  • 使用Cache对象填充下拉列表等,我们不希望在底层数据/数据库中进行更改。
  • 如果出现错误记录框架,请提供电子邮件警报以及记录错误。

HTML代码: - 不要编写内联CSS。 - 在页面末尾放置JavaScript代码(如果页面需要),除非页面需要加载时间操作。


现在已经到了这一点,如果您已经有完整的清单,请分享这些最佳实践点吗?

7 个答案:

答案 0 :(得分:26)

我随着时间的推移学到了一些最好的实践,并且已经在我公司使用了......很多主要适用于WebForms而不是MVC。

  • 不要直接编写.NET代码 你的ASPX标记(除非是为了 数据绑定,即Evals)。如果你 后面有一个代码,这就是代码 对于多个地方的页面和 使代码不易管理。放 代码隐藏中的所有.NET代码。
  • SessionPageStatePersister可以与ViewState一起使用 使ViewState无用 增加页面大小。重写 Page的PageStatePersister带有 新的SessionPageStatePersister将 将所有ViewState数据存储在内存中, 并且只会存储加密密钥 在客户端。
  • 创建您的网页可以继承的BasePage 重用页面之间的公共代码。 为您的网页创建一个MasterPage 用于视觉继承。页面用 应该有截然不同的视觉风格 使用不同的MasterPage。
  • 在每个WebForm上创建页面参数键名称的枚举 通过URL传递给 设置强类型页面参数。 这可以防止需要硬编码 页面参数键字符串和它们的 可能的错误输入,以及 允许强类型参数 从其他页面访问。
  • 利用ASP.NET Cache来缓存经常使用的 数据库中的信息。 构建(或从其他项目重用) 一个通用的缓存层 包装ASP.NET缓存。
  • 使用“页面上的属性”包装ViewState对象以避免 拼写中的发展错误, 等时引用来自的项目 ViewState集合。
  • 避免在ViewState中放置大对象和对象图,主要用于存储ID或非常简单的DTO对象。
  • 使用SessionManager包装ASP.NET会话以避免开发 拼写错误等 引用会话中的项目。
  • 广泛使用applicationSettings键/值 中的配置值 web.config - 包装 Configuration.ApplicationSettings 有一个可以习惯的类 轻松检索配置 设置,而不必记住 来自web.config的密钥。
  • 避免在UI上轻松设置显示属性 控件,而是使用CSS样式和 课程 - 这将使你的风格 更易于管理。
  • 在应用程序中创建UserControl以重用常用 整个过程中的UI功能 页面。例如,如果下拉 包含集合的列表 类别将用于许多 网站中的地方 - 创建一个 将数据的CategoryPicker控件 在页面加载时绑定自己。
  • 使用UserControls上的“属性”来设置类似的内容 默认值,不同的显示 页面之间等。值类型 属性可以在你的 UserControls然后设置在你的 使用类级别的ASP.NET标记 UserControls上的属性。
  • 使用ASP.NET验证控件执行简单操作 验证,或使用 CustomValidator执行复杂 验证。
  • 创建一个错误处理页面,可以在重定向时重定向到 未处理的异常发生在 你的网页。重定向可以 通过Page_Error事件发生 你的Page,Application_Error 您的Global.asax或其中的事件 内部的部分 web.config中。
  • 处理使用高度动态数据驱动的页面时 显示,使用第三方(免费) DynamicControlsPlaceholder控件到 简化保存所需的代码 动态添加控件的状态 回发之间。

答案 1 :(得分:19)

  1. 为所有asp.net页面创建一个基页。此页面将派生自System.Web.UI.Page,您可以将其放在YourApp.Web.UI中。让所有的asp.net页面都来自YourApp.Web.UI.Page类。这可以减少很多痛苦。

  2. 使用Application_OnError 处理程序正常处理任何错误或异常。您应该记录关键异常,并将异常的详细信息以及客户端的日期时间和IP发送到管理员电子邮件ID。是 ELMAH 确定无误。

  3. 使用ASP.NET主题。许多开发人员不使用它。使用它们 - 它们很有用。

  4. 使用MembershipProvider和RoleProvider 。并且从不使用内置的ProfileProvider - 它们以简单的字符串存储所有内容。在执行R / W

  5. 时,它会大大降低性能
  6. 使用 Firebug 进行客户端调试。尝试遵循Web应用程序的YSlow标准。对FireBug使用 YSlow 扩展名。

  7. 使用 jQuery 进行客户端脚本编写。

  8. 永远不要在会话中存储用户身份验证信息,或者不要使用会话来判断用户是否已登录。 仅在会话中存储最少的必要信息

  9. 查看 PostSharp 。可以提高代码的可维护性并提高工作效率。

  10. 永远不要在生产调试配置下部署asp.net应用程序。找出 here scottgu 对此有何评论。

  11. 用户 Web Deployment projects 。它可以转换web.config部分并替换为生产服务器设置。它将所有已编译的代码隐藏类合并为一个单独的程序集,这是一个很好的。

  12. 使用无Cookie域来提供静态资源,如图片,脚本,样式等。每个客户端请求都与一大堆Cookie一起发送,您在服务时不需要Cookie图片或脚本。因此,将这些资源托管在无cookie的域中。

  13. 从服务器缩小脚本,样式表和HTML响应。删除不必要的换行符和空格可以改善加载时间和带宽优化。

答案 2 :(得分:7)

<强>表单:

  1. 设置Page.Form.DefaultFocusPage.Form.DefaultButton以改善用户体验

  2. 在继续之前检查“保存”按钮处理程序中的Page.IsValid

  3. 常规

    1. 理解并实施文章“TRULY Understanding ViewState”中的技术

    2. 在页面事件中使用Page.IsPostBack来阻止代码不必要地运行。

    3. 尽可能使用超链接而不是发布和使用Response.Redirect。

      一个。理解并使用Response.Redirect的第二个参数(它“表示当前页面的执行是否应该终止”)

    4. 正确使用Page Lifecycle

    5. 在有意义的地方使用Per-Request cache(HttpContext.Items)代替Cache。

    6. <强> Web.Config中:

      1. 使用<compilation debug="false">

      2. 进行部署
      3. web.config level而不是page level(即@Register)注册您的控件。

      4. <强>主题:

        1. 使用主题时,也将静态图像放在主题中。

          一个。不要直接从标记链接到图像,而是从主题中的皮肤文件或css文件链接到它们。

          例如:<asp:Image SkinID="MyImage" runat="server" ImageUrl="Images/myImage.gif" />

答案 3 :(得分:4)

我不认为try / catch块总是适合低级方法。当然,您希望在遇到任何错误之前捕获(并记录/警告,甚​​至更好!)任何错误。但是,对于低级方法来说,通常更好地将其错误提升到更高级别。我在低级别错误捕获中遇到的问题是它经常让更大的操作继续,但是不太正确的结果会呈现给用户或保存到数据库中,从长远来看,它要困难得多修理。如果你不想对错误“做任何事情”,直到它升级到更高的水平,那么在你的代码中添加一个try / catch在你的代码中也会有很多混乱。

答案 4 :(得分:2)

以下是一些可能对您有所帮助的类似问题。

.NET best practices?

Best way to learn .NET/OOP best practices?

这应该也可以是社区维基。

答案 5 :(得分:1)

如果您有兴趣追求成为更好,更高效的开发人员的旅程,我会推荐几本书。这些书与语言无关,正如您可以通过用户评论看到的,非常有用。

Code Complete 2

Pragmatic Programmer

如果您正在寻找特定于.NET的书籍,您可能会欣赏以下书籍:

Microsoft Application Architecture Guide [在线以外免费提供打印格式]

答案 6 :(得分:1)

<强> ASP.NET

  • 如果您不使用会话状态,请不要 忘记关掉它。
  • 如果可能,请使用Server.Transfer代替Response.Redirect
  • 在IIS中设置过期参数。
  • 使用GZip压缩文本文件。
  • 一起使用服务器端和客户端验证。
  • 使用网址重写器或路由为SEO制作友好网址。

<强>设计

  • 编写每个类及其属性 你的CSS文件在同一行。 (减少文件大小)
  • 使用CSS Sprites。 (减少要求)