2012-04-16 2 views
2

Недавно наш профессор заявил, что наш слой презентации должен состоять в основном из вызовов методов и что большая часть нашего кода должна быть выполнена на уровнях бизнес-объекта и доступа к данным. Мой вопрос заключается в том, что это обычно включает код для ввода пользователем? Я имею в виду это; У меня есть форма, состоящая из нескольких текстовых полей, чтобы пользователь мог вводить значения для разных вещей. Затем пользователь нажимает кнопку, и информация сохраняется в базе данных.Что происходит с архитектурой 3-х уровневого уровня

Кнопка даже метод выглядит следующим образом:

//event handler for data input 
public static void btnEnterAbRipperXInfo_Click(object sender, EventArgs e) 
{ 
    //convert text box data into int datatype and assign to variable 
    inAndouts = int.Parse(txtInAndOuts.Text); 
    forwardBicycles = int.Parse(txtForwardBicycles.Text); 
    reverseBicycles = int.Parse(txtReverseBicycles.Text); 
    crunchyFrog = int.Parse(txtCrunchyFrog.Text); 
    crossLegWideLegSitups = int.Parse(txtCrossLegWideLegSitups.Text); 
    fiferScissors = int.Parse(txtFiferScissors.Text); 
    hipRockNRaise = int.Parse(txtHipRockNRaise.Text); 
    pulseUpsHeelsToHeaven = int.Parse(txtPulseUpsHeelsToHeaven.Text); 
    vUpRollUpCombos = int.Parse(txtVUpRollUpCombos.Text); 
    obliqueVUps = int.Parse(txtObliqueVUps.Text); 
    legClimbs = int.Parse(txtLegClimbs.Text); 
    masonTwists = int.Parse(txtMasonTwists.Text);    
} 

Если код в пределах указанной выше методы события кнопки на самом деле пойти в бизнес-объекте или доступ к данным класса вместо класса представления слоя?

Это не домашнее задание. Я создаю 90-дневную программу упражнений для своего сына за пределами моего класса программирования. Я также могу использовать его в качестве портфеля, когда я заканчиваю учебу, поэтому я хочу обеспечить, чтобы я следил за стандартными практиками.

ответ

0

BOL заботится о конкретных бизнес-проверках/случаях, которые необходимо дезинфицировать, прежде чем перейти на DAL (уровень доступа к данным). DAL просто берет входные данные от BOL и передает их в базу данных.

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

С точки зрения вашего кода проверки и проверки не требуется. Хотя это может показаться излишним, просто чтобы быть в соответствии с вашим проектом, вы все равно можете передать их BOL. По сути, ваш BOL не будет действовать на эти ценности - он просто примет эти значения и передаст их DAL.

+1

@ProgrammingNewbie - не проблема - просто поймите, что у вас в настоящее время должно быть в слое пользовательского интерфейса, вы можете попробовать TryParse перед Parse в своем коде. Это может легко вызвать исключение, если txtMasonTwists.Text не является целым числом. – JonH

0

Нет, это не подходит для объектов домена или уровня данных. Поскольку вы взаимодействуете непосредственно с элементами презентации, это очень хорошо для слоя пользовательского интерфейса.

Теперь, когда у вас есть эти значения, вытащили и проанализировали соответствующие типы, ТОГДА было бы хорошей идеей перенести эту работу с слоя пользовательского интерфейса.

Кроме того, вы должны рассмотреть возможность использования int.TryParse, чтобы преобразовать ваши значения, потому что ваша форма генерирует исключение, если вы вводите нечисловое значение в одно из текстовых полей.

1

Ваш код считывает значения из пользовательского интерфейса.

Этот код может быть только на уровне пользовательского интерфейса, так как бизнес-уровень не имеет доступа к пользовательскому интерфейсу.

1

Обычно на уровне слоя пользовательского интерфейса или презентации вы получаете значения из элементов управления (например, вы делаете это сейчас). Затем вызовите свой бизнес-логический метод со всеми этими значениями. Что-то вроде

BAL.ProcessRequest(arg1,arg2,.....); 

Теперь, если у вас есть какие-то бизнес-правила, относящиеся к этим входам, вы выполняете, то в вашей бизнес-логики. Например, если вы передаете продукт и его упорядоченное количество, и вы хотите рассчитать скидку на эти продукты на основе какого-либо бизнес-правила, тогда вы выполняете расчет скидки в бизнес-слое.
После этого, когда вы собираетесь отправить в базу данных, вы вызываете уровень доступа к данным. Что-то вроде:

DAL.SaveData(arg1,arg2,...); 

Причина наличия отдельного слоя в основном заключается в том, чтобы свободно соединять приложение.Например, если вы решите изменить базу данных под кластерами, вам потребуется изменить только уровень доступа к данным, а не бизнес-уровень или уровень представления.
Скажем, если вы хотите изменить уровень пользовательского интерфейса/презентации из приложения веб-приложения в приложение «Рабочий стол», то в случае, если изменения будут сделаны только в слое «Презентация». Уровень бизнес-уровня и доступа к данным останется неизменным. Если вы подумываете о переносе элементов управления текстовыми полями на бизнес-уровень, ваше приложение будет подключаться (слой UI/Presentatioin будет связан с бизнес-слоем).
Вот статья, объясняющая Three Tier Architecture.

+0

@ Habib.OSU - Спасибо, что нашли время, чтобы объяснить это. Это было ОЧЕНЬ полезно. Также, спасибо за ссылку. Я обязательно прочитаю его. –

+0

Если мне не нужно выполнять какую-либо логику, я могу передать информацию прямо из пользовательского интерфейса в DAL или если он все еще проходит через BAL? Кажется пустой тратой ресурсов для создания класса BAL только для передачи данных из пользовательского интерфейса. –

+1

@ProgrammingNewbie Конечно, вы можете это сделать, но я видел очень мало случаев, когда вам не требуется выполнять какие-либо бизнес-правила для данных. Но если вы думаете, что даже позже вам не потребуется ничего делать, вы можете отказаться от бизнес-уровня. – Habib