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

时间:2010-11-18 15:39:16

标签: c# .net reusability

过去几天我一直在学习C#,用于创建网站。

我对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");
            }
        }
    }
}

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

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

我相信我必须有更好的方法来做到这一点,但我自己也无法想到它。

4 个答案:

答案 0 :(得分:13)

关于ASP.NET WebForms和可重用性,必须说最常见的问题在于将过多的逻辑放入代码隐藏文件中。程序员,特别是那些刚接触ASP.NET WebForms的程序员,往往会把业务逻辑甚至数据库访问代码放在那里。过了一会儿,它将应用程序变成了一个难以维护的巨大模糊。

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

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

这是在你用一些严肃的编码弄脏之前的第一个简单的考虑因素。

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

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

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

答案 1 :(得分:4)

也许登录是一个糟糕的例子,因为有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>

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

  • 使用虚拟目录或
  • 将整个内容移动到根目录。

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

以下是附件中的一个简单示例:LibExemplo.zip

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

此致

雷纳尔多·费尔南多