2013-03-07 2 views
0

Я разработал веб-сайт с возможностями CRUD на передних страницах и панели управления. Я вижу, что я написал одинаковые коды для каждой страницы при попытке подключения и CRUD.Избегайте повторных кодов на каждой странице asp.net C#

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

Например:

У меня есть БД и, конечно, мне нужна строка соединения. Мне нужно прочитать записи на странице (скажем) blogs.aspx. На другой странице news.aspx Мне нужно снова создать новое соединение, и я создаю новый экземпляр Sqlconnection.

Как я уже сказал, у меня теперь более 40 страниц, и есть много повторяющихся соединений db, datagridview, заполняющих коды.

Мои вопросы:

  1. Будет ли это быть хорошим способом определить соединение, DataTable, DataAdapter, командные экземпляры в главной странице (Site.Master)? Или я бы назвал инкапсуляцию?

  2. Если я написал класс с именем konnekt.cs, как бы я унаследовал его объекты к моей текущей странице? Другими словами, как я мог распространить на konnekt.cs с моей текущей страницы?

Возможно, я получу отрицательный голос, но я считаю, что этот риск стоит изучить эти понятия. Я новичок на C#, а также другие языки программирования.

Спасибо за советы.

+0

что "вопрос право на Баунти в 2-х дней"? Я сделал что-то не так? – zkanoca

+1

Никакая щедрость не позволяет вам потратить часть своего представителя, чтобы быстрее получить ответ. Человек, который отвечает на него, получит дополнительную «награду» в качестве награды. –

+0

Не имеет дублированного кода. Но решение о том, что лучше для вашего конкретного случая, должно быть сделано вами ... Сделайте изменения в обоих направлениях - чем верните то, что вам не нравится, и совершите другое. –

ответ

0

Вы можете определить этот метод в других классах и просто вызвать их из кода позади. Или определить некоторые из них в общем BaseClass

2 вы должны создать подкласс страницы, а затем вы можете создавать свой собственный BaseClass

5

Что вам нужно сделать, это узнать, понятие «разделение задач». Что в основном означает, что вы делите свой код в соответствии с тем, что он делает. Прямо сейчас (из того, что я понял из вашего вопроса), весь ваш код находится в одном месте. Это, как вы заметили, не хорошая вещь. Уверен, что это работает сейчас, но как только вам нужно внести изменения, у вас возникнут проблемы.

В самом базовом разделе вам необходимо разделить код, который управляет данными в базе данных (обычно называемый уровнем доступа к данным) и кодом, отображающим эти данные (уровень представления). Когда загружается страница (уровень представления), она вызывает уровень доступа к данным для получения данных из него (страница не вызывает непосредственно БД) и т. Д. И т. Д. Обычно между этими двумя называется бизнес-уровень, который имеет логику бизнес-правил.

Будет ли это хорошим способом определить Connection, DataTable, DataAdapter, экземпляры команд на главной странице (Site.Master)? Или я бы назвал инкапсуляцию?

Это не очень хорошая идея. Главные страницы принадлежат Презентации, поэтому размещение чего-либо там, которое вызывает БД напрямую, - это не выход.

Если я написал класс с именем konnekt.cs, как бы я унаследовал его объекты к моей текущей странице? Другими словами, как я мог распространить на konnekt.cs с моей текущей страницы?

Еще раз, никогда не вызывайте БД непосредственно со своей страницы. Постройте другой класс, который соединяется с БД, и позвольте странице называть классом.

0

Как System Down, мое предложение отбросить код db в код страницы .. использовать папку App_Code.

В коде файла страницы вы должны написать методы/свойства/etc для работы страницы, а не работы db.

Для общего кода страницы, вы можете поместить его в C# файл (всегда под App_Code),

путем расширения System.Web.UI.Page класса.

Пример App_Code/PageBase.cs:

public class PageBase : System.Web.UI.Page 
{ 
    // common code 
} 

Пример Default.aspx.cs:

public partial class _Default : PageBase // instead of System.Web.UI.Page 
{ 

}