2010-11-18 5 views
9

Tôi đã học C# trong vài ngày qua để sử dụng với ASP.NET để tạo trang web.Viết mã C# có thể tái sử dụng cho các trang web ASP.NET

Tôi rất mới với C# nhưng tôi đã suy nghĩ về cách tôi nên đi về viết mã của tôi để làm cho nó như tái sử dụng càng tốt. Một ví dụ nhanh, cho phép nói rằng tôi muốn tạo một đoạn mã để kiểm tra chi tiết đăng nhập của người dùng mà tôi có thể thả vào trang web khác bất kỳ lúc nào và làm việc với dữ liệu được cung cấp.

Remembering rằng tôi không có ý tưởng làm thế nào tôi nên bố trí mã của tôi để làm điều này, đây là ý tưởng tôi đã đưa ra (Tôi sẽ giữ nó ngắn với một số loại mã giả):

Trước tiên tôi tạo ra một lớp:

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; 
     } 
    } 
} 

sau đó, tôi sẽ có một trang aspx nơi biểu mẫu đăng nhập sẽ đi, ví dụ:

<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> 

Và mã đằng sau tập tin sẽ trông như thế này:

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

này hoạt động như mong đợi, nhưng những gì tôi muốn biết là:

  • Có cách nào tốt hơn để tạo mã tái sử dụng?
  • Làm cách nào để thiết kế mã có thể sử dụng lại?

Tôi chắc chắn phải có cách tốt hơn để tôi thực hiện việc này, nhưng tôi không thể tự mình nghĩ về điều này.

Trả lời

13

Đối với ASP.NET WebForms và reusability, nó có thể nói rằng vấn đề phổ biến nhất nằm với việc đặt quá nhiều logic vào các tập tin mã phía sau. Các lập trình viên, đặc biệt là những người mới dùng ASP.NET WebForms, có khuynh hướng đặt các phần của logic nghiệp vụ và thậm chí cả mã truy cập cơ sở dữ liệu. Sau một thời gian, nó biến ứng dụng của họ thành một đám đông khổng lồ khó duy trì.

Trích xuất logic nghiệp vụ của bạn thành một lớp riêng biệt. Truy cập nó từ mã phía sau. Chỉ cần truy cập, không triển khai trực tiếp. Tránh xa cơ sở dữ liệu. Chỉ có lớp kinh doanh mới được phép nói chuyện với nó.

Bạn thậm chí có thể đặt các thực thể mô hình logic và doanh nghiệp của mình vào một thư viện lớp riêng biệt. Sau đó, nó trở nên tái sử dụng như thế nào.

Đó là những cân nhắc đơn giản đầu tiên trước khi bạn bị bẩn tay với một số mã hóa nghiêm trọng.

Kỹ thuật sử dụng lại trong .NET chủ yếu xoay quanh việc đặt mã chung vào thư viện lớp để nhiều ứng dụng sử dụng.

Khả năng sử dụng lại như được áp dụng cho các ứng dụng web (ASP.NET) thường đạt được với UserControls (* .ascx) cho phần trình bày và hiển thị các phần của ứng dụng thông qua dịch vụ web.

Một cũng có thể đề cập đến việc chuyển logic nghiệp vụ vào lớp cơ sở dữ liệu (đưa nó vào các thủ tục được lưu trữ) nhưng điều này thường được coi là gây tranh cãi trong những ngày này.

+0

Tôi đồng ý! Phát triển 3 tầng hoặc n tầng được thực hiện rất nhiều. Cách dễ dàng cho người mới bắt đầu có thể đặt "mô-đun" bên trong "App_Code" và sau đó chỉ cần gọi các chức năng từ đó. Không tiếp tục xác nhận vv trong mã-đằng sau. Chỉ "chức năng gọi" từ codebehind trang thực tế. – BerggreenDK

4

Có thể đăng nhập là một ví dụ tồi, vì có ASP.NET built-in ways to do this, nhưng, nói chung, bạn đang đi đúng hướng: Không đặt logic nghiệp vụ mà bạn có thể muốn sử dụng lại vào Trang, mà là vào một số lớp - điều này có lợi thế bổ sung về cấu trúc mã của bạn một cách hợp lý hơn: Các công cụ liên quan đến giao diện người dùng nằm trong trang ASPX (và đó là codebehind), logic chương trình nằm trong các lớp riêng biệt. Cuối cùng, bạn sẽ muốn di chuyển một số các lớp đó vào một dự án thư viện riêng biệt, có thể được liên kết bởi nhiều ứng dụng web khác nhau.

Nếu bạn muốn sử dụng ASP.NET yếu tố giao diện người dùng, bạn có khả năng để viết ASP.NET Server Controls, mà bạn đưa vào thư viện của bạn và sử dụng trong các trang ASP.NET của bạn như thế này:

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

tốt nhất cách tôi đã tìm thấy để tái sử dụng các trang WebForms và mã là sử dụng mô hình MVP. Chúng tôi đã triển khai MVP cho một số trang của chúng tôi trên trang web cũ của chúng tôi là described here và khi chúng tôi chuyển sang ASP.NET MVC, chúng tôi thấy quá trình này thực sự đơn giản.

+0

Tôi nên lưu ý rằng MVP chỉ giúp những gì mà @Developer Art đề xuất: tách logic nghiệp vụ của bạn khỏi mã đằng sau mã. –

0

Có một giải pháp đơn giản để tái sử dụng mã trong ASP.NET.

Sau khi nghiên cứu, tôi thấy hai giải pháp:

  • làm việc với thư mục ảo, hoặc
  • di chuyển toàn bộ nội dung vào thư mục gốc.

Kiểm tra hai giải pháp, xác định những gì thực sự cần được thực hiện: chỉ đủ để đặt thư mục BIN của dự án của chúng tôi để nhắm mục tiêu thư mục gốc (C:\inetpub\wwwroot\bin).

Đây là ví dụ đơn giản trong tệp đính kèm: LibExemplo.zip.

Hiện tại tôi sử dụng SharpDevelop không cần cài đặt hoặc cấu hình dài.

Kính trọng,

Reinaldo Fernando