Проект, в котором я работаю, «Система управления университетом», и это большой. Сейчас я реализую раздел регистрации студентов, который отлично работает (небольшая часть проекта). Я использовал «Архитектура трех уровней» и «ORM - EF» в шаблоне ASP.NET MVC. В проекте мне нужно сделать некоторые проверки для регистрации студентов в зависимости от их года, отдела и т. Д. Таким образом, есть разделы, такие как DAL, BLL, наконец, контроллер и представление. Я сделал проверки в контроллере и получал данные от BLL, которые снова извлекают данные из DAL (это простое условие «Архитектура с тремя уровнями»). Поэтому я задаю следующие вопросы:Трехуровневая архитектура: получить все данные и проверки
1) Правильно ли делать проверки в контроллере?
2) Если нет и нужно сделать это в BLL, будет ли это нормально, и почему или я могу продолжать делать это в контроллере?
Примечание: Для меня выполнение валидации в контроллере или BLL кажется ОК и тем же. Это имеет какой-то эффект?
Прямо сейчас, я сделал следующее:
DAL:
public List<Student> Add(int studentID, string studentName, string email, DateTime regDate)
{
List<Student> lst = null;
Student aStudent = new Student();
aStudent.StudentID = studentID;
aStudent.StudentName = studentName;
aStudent.Email = email;
aStudent.RegDate = regDate;
try
{
db.Students.Add(aStudent);
db.SaveChanges();
}
catch (Exception ex)
{
ex.ToString();
}
return lst;
}
BLL:
public List<Student> Add(int studentID, string studentName, string email, DateTime regDate)
{
return aStudentGateway.Add(studentID, studentName, email, regDate);
}
Контроллер:
/**Student Registration - Starts**/
[HttpPost]
public ActionResult AddStudent(Student aStudent)
{
List<Department> departments = aDepartmentManager.GetAllDepartments();
List<DepartmentViewModel> departmentsViewModel = aDepartmentManager.GetAllDepartmentViewModel();
DateTime yearInDateTime = Convert.ToDateTime(Request.Form["RegDate"]);
string extractYear = yearInDateTime.ToString();
var year = DateTime.Parse(extractYear).Year;
int department = Convert.ToInt32(Request.Form["Department"]);
List<Student> studentList = aStudentManager.GetAllStudents();
int count = 1;
var query = (from c in studentList
where c.Department == department && c.Year == year
select c).ToList();
foreach (var c in query)
{
if (query.Count() > 0)
{
int m = Convert.ToInt32(c.StudentID);
count = m + 1; //Incrementing the numbers by one with the table column
}
else
{
int m = 1;
count = m + 1; //Incrementing the numbers by one with the variable assigned one
}
}
Student student = new Student();
student.StudentName = Request.Form["StudentName"];
student.Email = Request.Form["Email"];
student.RegDate = Convert.ToDateTime(Request.Form["RegDate"]);
student.StudentID = count;
if (aStudentManager.ExistEmailAny(student.Email))
{
ViewBag.ErrorMessage = "Email already exists";
}
else
{
aStudentManager.Add(aStudent.StudentID, aStudent.StudentName, aStudent.Email, aStudent.RegDate);
ViewBag.Message = "Registration successful. See below to verify.";
/**This section used to show student details after registration**/
var result = (from c in departments
join d in departmentsViewModel on c.DepartmentID equals d.DepartmentId
where d.DepartmentId == department
select c);
foreach (var items in result)
{
if (count.ToString().Length > 1)
{
ViewBag.StudentID = items.Code + "-" + year + "-" + "0" + count;
}
else
{
ViewBag.StudentID = items.Code + "-" + year + "-" + "00" + count;
}
StudentViewModel.StudentID = student.StudentID;
StudentViewModel.StudentName = student.StudentName;
StudentViewModel.Email = student.Email;
StudentViewModel.RegDate = student.RegDate;
}
/**This section used to show student details after registration**/
}
return View();
}
/**Student Registration - Ends**/
Благодарим вас за то, что задали этот вопрос. Я собирался задать тот же вопрос. В последнее время я работаю над различными проектами, и я всегда нахожу, что я ничего не делаю в BLL, кроме вызова DAL. Тогда для чего БЛЛ? Я также пишу все бизнес-проверки и манипуляции с объектами в контроллере. Я хотел бы знать правильный подход, чтобы сделать это. –
@KrishnanduSarkar: Похоже, ваш вопрос отличается от вопроса OP, если у вас есть такой вопрос, тогда вы можете попросить нового. –
Спасибо за ответы. Я попытался понять, что вы оба написали. В некоторых учебниках ** Архитектуры с тремя уровнями я видел логические части, такие как условия, которые выполняются в контроллере и на самом деле не уверены в этом. Но, несмотря на проверку данных, мне кажется, что в соответствии с требованиями проекта есть определенные условия, которые должны выполняться в контроллере, а не в DAL. Позвольте мне сделать это более ясным. В DAL мы вставляем данные. Но в некоторых случаях могут потребоваться некоторые условия для вставки этих данных. Поэтому я предполагаю, что эти условия могут быть проверены в контроллере. –