为 ASP.NET 网站编写可重用的 c# 代码

Posted

技术标签:

【中文标题】为 ASP.NET 网站编写可重用的 c# 代码【英文标题】:Writing reusable c# code for ASP.NET websites 【发布时间】:2011-05-12 02:56:26 【问题描述】:

过去几天我一直在学习 C#,以便与 ASP.NET 一起使用来创建网站。

我对 C# 很陌生,但我一直在思考应该如何编写代码以使其尽可能可重用。

举个简单的例子,假设我想创建一段代码来检查用户的登录详细信息,我可以随时将其放入另一个站点,并让它与提供的数据一起工作。

记住我不知道我应该如何布局我的代码来做到这一点,这就是我想出的想法(我会用某种伪代码保持简短):

首先我创建一个类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Module 
    public class Login 
        public static bool check_login(string usernameCheck = "", string passwordCheck = "") 
            if(usernameCheck == "user" && passwordCheck == "password") 
                return true;
            

            return false;
        
    

然后我会有一个登录表单所在的 aspx 页面,例如:

<asp:Content ContentPlaceHolderID="column1" runat="server">
    <asp:TextBox ID="usernameInput" runat="server"></asp:TextBox>
    <asp:TextBox ID="passwordInput" runat="server"></asp:TextBox>
    <asp:Button OnClick="check_login" Text="Login" runat="server" />
</asp:Content>

文件后面的代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Module 
    public partial class _default : System.Web.UI.Page 
        protected void Page_Load(object sender, EventArgs e) 

        

        protected void check_login(object sender, EventArgs e) 
            if(Login.check_login(usernameInput.Text, passwordInput.Text)) 
                Response.Redirect("some other place");
            
        
    

这按预期工作,但我想知道的是:

有没有更好的方法来创建可重用的代码? 如何设计可重用代码?

我确信一定有更好的方法可以做到这一点,但我自己想不出。

【问题讨论】:

【参考方案1】:

关于 ASP.NET WebForms 和可重用性,不得不说最常见的问题在于将过多的逻辑放入代码隐藏文件中。程序员,尤其是那些刚接触 ASP.NET WebForms 的程序员,倾向于将部分业务逻辑甚至数据库访问代码放在那里。一段时间后,它会将他们的应用程序变成一个巨大的难以维护的宣传语。

将您的业务逻辑提取到一个单独的层中。从代码隐藏访问它。只是访问,而不是直接实现它。远离数据库。应该只允许业务层与之对话。

您甚至可以将业务逻辑和域模型实体放入单独的类库中。然后它是如何变得可重复使用的。

这是您开始认真编码之前的第一个简单考虑因素。

.NET 中的可重用性技术主要围绕着将通用代码搁置到类库中以供各种应用程序使用。

应用于 Web 应用程序 (ASP.NET) 的可重用性通常通过 UserControls (*.ascx) 来实现,用于表示部分并通过 Web 服务公开应用程序的部分。

还可以提到将业务逻辑移入数据库层(将其放入存储过程),但如今这通常被认为是有争议的。

【讨论】:

我同意! 3 层或 n 层开发可以解决很多问题。对于初学者来说,简单的方法可能是将“模块”放在“App_Code”中,然后从那里调用函数。不要在代码隐藏中保留验证等。只有来自实际页面代码隐藏的“调用函数”。【参考方案2】:

也许登录是一个不好的例子,因为有 ASP.NET built-in ways to do this,但是,总的来说,你是在正确的轨道上:不要把你可能想要重用的业务逻辑放到页面本身,而是放到某些类中——这具有以更合乎逻辑的方式构建代码的额外优势:与用户界面相关的内容位于 ASPX 页面中(并且它是代码隐藏),程序逻辑位于单独的类中。最终,您需要将其中的一些类移到一个单独的库项目中,该项目可以被许多不同的 Web 应用程序链接到。

如果您想重用 ASP.NET 用户界面元素,您可以编写 ASP.NET Server Controls,将其放入您的库并在您的 ASP.NET 页面中使用,如下所示:

<asp:Content ContentPlaceHolderID="column1" runat="server">
    <custom:MyCustomLoginControl runat="server" 
                                 OnSuccessRedirectTo="myStartPage.aspx" />
</asp:Content>

【讨论】:

【参考方案3】:

我发现重用 WebForms 页面和代码的最佳方法是使用 MVP 模式。我们在旧网站上为我们的一些页面实现了 MVP described here,当我们迁移到 ASP.NET MVC 时,我们发现这个过程非常简单。

【讨论】:

我应该注意到 MVP 只是帮助实现 @Developer Art 的建议:将您的业务逻辑与代码背后的代码分开。【参考方案4】:

在 ASP.NET 中有一个简单的代码重用解决方案。

经过研究,我找到了两种解决方案:

使用虚拟目录,或 将全部内容移至根目录。

检查这两个解决方案,确定真正需要做的事情:只需将我们项目的BIN 文件夹设置为指向根目录(C:\inetpub\wwwroot\bin)就足够了。

这是附件中的一个简单示例:LibExemplo.zip。

目前我使用SharpDevelop,不需要冗长的安装或配置。

问候,

雷纳尔多·费尔南多

【讨论】:

以上是关于为 ASP.NET 网站编写可重用的 c# 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何为 asp.net webapi 构建可重用的 .Net 客户端,包括 IQueryable 功能等

如何在scala中将withcolumn编写为可重用代码

重用令牌 asp.net web api c#

使用可折叠/可扩展行创建 gridview C# asp.net

C#与VB.net有啥不同呀?

在哪里为 office365 sharepoint 站点编写 C# 代码