Narzędzia: Mvc4, SQL Server, NhibernateMvc4: N architektura tier
uczę architekturę nTier i planują nauczyć się tego z małym przykładzie. Będzie to aplikacja do rejestracji studenta, która będzie miała formularz dla a. imię b. nazwisko c. adres d. Student Id Aplikacja będzie mogła a. Zdobądź ucznia według Id b. Zaproś wszystkich studentów c. Zarejestruj nowych studentów/Zapisz ucznia d. Edytuj ucznia e. Usuwanie studentowi
planuję mieć następujące kondygnacje
Warstwa prezentacji (projekt oddzielna aplikacja MVC 4)
--- html do formularza student idzie tutaj. Mogę używać jquery itp. Tutaj --- mój kontroler zadzwoni do usługi
Warstwa usługi (samodzielny projekt: projekt biblioteki klas, w tym przypadku tylko Internet będzie moim klientem.) Nauczę się korzystać z webAPI lub wcf dla to później w innym projekcie)
--- StudentService tutaj
--- IstudentService tutaj
warstwa działalności: (indywidualne projektu: projekt biblioteki klas) ??
Warstwa danych: (oddzielny projekt: projekt biblioteki klas) ??
Database (baza danych serwera SQL)
teraz mam mylić i moje pytania są następujące: (?, Która warstwa)
gdzie będę tworzyć mój model studencki
Co będzie Piszę w mojej warstwie biznesowej dla tego przykładowego studenta, który mam.
Co będzie w mojej warstwie danych? Jakie metody będę pisać? Czy są to metody, które bezpośrednio komunikują się z bazą danych ?
Niektóre przykłady będą świetne. Poszukam dobrego kontenera IOC.
Oto przykładowy kod poniżej:
public interface IStudentService
{
IEnumerable<Student> GetStudents();
Student GetStudentById(int id);
void CreateStudent(Student student);
void UpdateStudent(Student student);
void DeleteStudent(int id);
void SaveStudent();
}
public class StudentService : IStudentService
{
private DataContext _datacontext;
public StudentService()
{
_datacontext = new DataContext();
}
public IEnumerable<Student> GetStudents()
{
var students = _datacontext.Students;
return students;
}
public Student GetStudentById(int id)
{
return _datacontext.Students.Find(id);
}
public void CreateStudent(Student student)
{
_datacontext.Students.Add(student);
_datacontext.SaveChanges();
}
public void UpdateStudent(Student student)
{
_datacontext.Entry(student).State = EntityState.Modified;
//_datacontext.Entry(student).State = EntityState.Modified;
_datacontext.SaveChanges();
}
public void DeleteStudent(int id)
{
var student = _datacontext.Students.Find(id);
_datacontext.Entry(student).State = EntityState.Deleted;
_datacontext.SaveChanges();
}
public void SaveStudent()
{
_datacontext.SaveChanges();
}
}
Nie jestem pewien, czy Architektura Cebuli to dobra rzecz dla kogoś, kogo się tylko uczy, ponieważ różne artykuły zwykle zawierają dużo wiedzy. Myślę, że OA to dobry "drugi krok" po wykonaniu tradycyjnego trójwarstwowego warstwowania. –
Kontener IoC został wymieniony, więc założyłem pewien poziom wiedzy. Pamiętam, że sam się tego nauczyłem. Zrobiłem porządny bałagan "klasycznej" 3-warstwowej aplikacji. Ale kiedy próbowałem OA, sprawy weszły we właściwe miejsce i wszystko działało ładnie. – trailmax
Tak, ale fakt, że nauczyłeś się wiele z "właściwego bałaganu", który sprawił, że OA ma dla ciebie sens.Uważam, że OA to dużo "rób to, ponieważ tak powiedziałem", jeśli nie nauczyłeś się problemów, które rozwiązuje OA. –