Написание многоразового кода на C # для сайтов ASP.NET - PullRequest
9 голосов
/ 18 ноября 2010

Я изучал 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");
            }
        }
    }
}

Это работает, как и ожидалось, но я хочу знать следующее:

  • Есть ли лучший способ создания повторно используемого кода?
  • Как вы разрабатываете свой код многократного использования?

Я уверен, что для меня должен быть лучший способ сделать это, но я просто не могу думать об этом самостоятельно.

Ответы [ 4 ]

13 голосов
/ 18 ноября 2010

Что касается ASP.NET WebForms и возможности многократного использования, следует сказать, что наиболее распространенная проблема заключается в том, что в файлы с выделенным кодом накладывается слишком много логики. Программисты, особенно новички в ASP.NET WebForms, склонны помещать туда части бизнес-логики и даже код доступа к базе данных. Через некоторое время их приложение превращается в гигантский, трудный в обслуживании рекламный ролик.

Извлеките свою бизнес-логику в отдельный слой. Доступ к нему из кода. Просто получите доступ, а не реализуйте его напрямую. Держитесь подальше от базы данных. Только бизнес-уровень должен иметь возможность говорить с ним.

Вы даже можете поместить свою бизнес-логику и сущности модели предметной области в отдельную библиотеку классов. Тогда это, как это становится многоразовым.

Это первые простые соображения, прежде чем вы запачкаете руки серьезным кодированием.

Методы повторного использования в .NET в основном вращаются вокруг размещения общего кода в библиотеках классов для использования различными приложениями.

Возможность повторного использования применительно к веб-приложениям (ASP.NET) обычно достигается с помощью UserControls (* .ascx) для части презентации и демонстрации частей приложения через веб-службы.

Можно также упомянуть переместив бизнес-логику в базе данных слоя (поставив его в хранимые процедуры), но это один обычно воспринимается как неоднозначных в эти дни.

4 голосов
/ 18 ноября 2010

Возможно, вход в систему - плохой пример, потому что в ASP.NET есть встроенные способы сделать это , но, как правило, вы на правильном пути: не ставьте бизнес-логику так, чтобыВозможно, вы захотите повторно использовать саму страницу, а не некоторые классы - это дает дополнительное преимущество структурирования вашего кода более логичным способом: связанные с пользовательским интерфейсом вещи находятся на странице ASPX (и это код), логика программыпроживает в отдельных классах.В конце концов, вы захотите переместить некоторые из этих классов в отдельный библиотечный проект, к которому могут быть привязаны многие различные веб-приложения.

Если вы хотите повторно использовать элементы пользовательского интерфейса ASP.NET, у вас естьвозможность записи серверных элементов управления ASP.NET , которые вы помещаете в свою библиотеку и используете на своих страницах ASP.NET, например:

<asp:Content ContentPlaceHolderID="column1" runat="server">
    <custom:MyCustomLoginControl runat="server" 
                                 OnSuccessRedirectTo="myStartPage.aspx" />
</asp:Content>
1 голос
/ 18 ноября 2010

Лучший способ повторно использовать страницы и код веб-форм - использовать шаблон MVP. Мы внедрили MVP для некоторых наших страниц на нашем старом веб-сайте как , описанный здесь , и когда мы перешли на ASP.NET MVC, мы обнаружили, что процесс действительно прост.

0 голосов
/ 12 января 2013

Существует простое решение для повторного использования кода в ASP.NET.

После исследования я нашел два решения:

  • работа с виртуальными каталогами или
  • переместить все содержимое в корневой каталог.

Проверяя два решения, определили, что действительно нужно сделать: достаточно просто установить папку BIN нашего проекта, чтобы указать целевой корневой каталог (C:\inetpub\wwwroot\bin).

Вот простой пример в прикрепленном файле: LibExemplo.zip .

В настоящее время я использую SharpDevelop , который не требует длительной установки или конфигурации.

С уважением,

Рейнальдо Фернандо

...