【问题标题】:Building ASP.NET application - Best Practices构建 ASP.NET 应用程序 - 最佳实践
【发布时间】:2009-11-06 16:27:46
【问题描述】:

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


服务器端代码:

  • 也可以使用 catch 块来捕获和记录低级错误。
  • 使用缓存对象来填充下拉列表等,我们不会期望底层数据/数据库发生变化。
  • 如果是错误日志记录框架,请在记录错误的同时提供电子邮件警报。

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


现在进入正题,如果您已经有完整的列表,请分享这些最佳实践要点吗?

【问题讨论】:

  • 这是一个真正广泛的问题。
  • 这应该被标记为社区维基。

标签: asp.net


【解决方案1】:

随着时间的推移,我学到了一些最佳实践,并为我的公司编写了一些最佳实践……许多主要适用于 WebForms 而不是 MVC。

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

【讨论】:

    【解决方案2】:
    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. 使用 Firebug 进行客户端调试。尝试遵循 Web 应用程序的 YSlow 标准。为 FireBug 使用 YSlow 扩展。

    6. 使用 jQuery 编写客户端脚本。

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

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

    9. 永远不要在生产环境中在调试配置下部署 asp.net 应用程序。了解 here scottgu 对此有何评论。

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

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

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

    【讨论】:

    • @curious_geek +1 为 Firebug。没有它就无法编程(Resharper 也一样)
    【解决方案3】:

    表格:

    1. 设置Page.Form.DefaultFocus和Page.Form.DefaultButton提升用户体验

    2. 在您的保存按钮处理程序中检查Page.IsValid,然后再继续。

    一般:

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

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

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

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

    4. 正确使用Page Lifecycle。

    5. 在有意义的地方使用Per-Request cache (HttpContext.Items) 而不是缓存。

    Web.Config:

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

    2. 在web.config level 而不是page level(即@Register)上注册您的控件。

    主题:

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

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

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

    【讨论】:

      【解决方案4】:

      我不认为 try/catch 块总是适合低级方法。当然,您想在错误到达用户之前捕获(并记录/警告,甚​​至更好!)。但是对于低级方法来说,让其错误提升到更高级别通常会更好。我在低级错误捕获中看到的问题是,它通常让更大的操作继续进行,但随后将不完全正确的结果呈现给用户或保存到数据库中,从长远来看,这要困难得多修理。如果在错误提升到更高级别之前您不打算对错误“做任何事情”,那么在每个级别都放置一个 try/catch 也只是代码中的大量额外混乱。

      【讨论】:

        【解决方案5】:

        这里有一些类似的问题可能会对您有所帮助。

        .NET best practices?

        Best way to learn .NET/OOP best practices?

        这也应该是社区 wiki。

        【讨论】:

          【解决方案6】:

          如果您有兴趣成为一名更好、更高效的开发人员,我会推荐几本书。这些书与语言无关,从用户评论中可以看出,它们非常有用。

          Code Complete 2

          Pragmatic Programmer

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

          Microsoft Application Architecture Guide[非打印格式可在线免费获取]

          【讨论】:

            【解决方案7】:

            ASP.NET

            • 如果你不使用会话状态,不要 忘记关掉它。
            • 如果可能,请使用Server.Transfer 而不是Response.Redirect。
            • 在 IIS 中设置过期参数。
            • 使用 GZip 压缩文本文件。
            • 同时使用服务器端和客户端验证。
            • 使用 Url Rewriter 或 Routing 为 SEO 制作友好的 url。

            设计

            • 编写每个类及其属性 您的 CSS 文件在同一行中。 (减小文件大小)
            • 使用 CSS 精灵。 (减少请求)

            【讨论】:

            • 因提及 Server.Transfer 而被投票赞成。它真的被忽视了。重定向对于绕过 Web 的本机请求模型来说是一个可怕的问题。
            猜你喜欢
            • 2017-07-09
            • 1970-01-01
            • 2020-11-14
            • 2011-07-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多