Strumenti: Mvc4, SQL server, NHibernateMvc4: N tier
Sto imparando l'architettura nTier e il piano per imparare questo con un piccolo esempio. Questa sarà una domanda di registrazione per studenti che avrà un modulo per a. nome b. cognome c. indirizzo d. ID studente L'applicazione sarà in grado di a. Chiedi agli studenti di Id b. Prendi tutti gli studenti c. Registrati nuovi studenti/Salva studente d. Modifica uno studente e. Eliminazione di uno studente
ho intenzione di avere i seguenti livelli
Presentazione strato (progetto separato MVC 4 applicazione)
--- html per la forma studente va qui. Posso usare jquery ecc. --- il mio controller chiamerà il servizio
Livello di servizio (progetto separato: progetto libreria di classi. In questo caso solo il web sarà il mio cliente. Imparerò a utilizzare webAPI o wcf per questo più tardi in un altro progetto)
--- StudentService qui
--- IstudentService qui
strato di business: (progetto separato: progetto di libreria di classi) ??
Livello dati: (progetto separato: progetto libreria di classi) ??
Database: (database di SQL Server)
Ora mi sono confuso e le mie domande sono: (? Quale livello)
dove posso creare il mio modello studente
Quale sarà Scrivo nel mio livello aziendale per questo esempio di studente che ho.
Cosa andrà nel mio livello dati? Quali metodi scriverò? Sono metodi che comunicano direttamente con il database ?
Alcuni esempi saranno fantastici. Cercherò un buon contenitore di IOC.
Ecco il codice di esempio:
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();
}
}
Non sono sicuro che Onion Architecture sia una buona cosa per qualcuno che sta imparando, dato che i vari articoli tendono ad assumere molta conoscenza. Penso che l'OA sia un buon "secondo passo" dopo aver fatto un tradizionale livello a 3 livelli. –
È stato menzionato il contenitore IoC, quindi presumo un livello di conoscenza. Ricordo di aver imparato queste cose da solo. Ho fatto un pasticcio giusto con l'app "classica" a 3 strati. Ma quando ho provato OA, le cose sono appena arrivate nel posto giusto e tutto ha funzionato bene. – trailmax
Sì, ma è il fatto che hai imparato molto dal "pasticcio giusto" che ha reso OA sensato per te.Sento che OA è un sacco di "Fai questo perché l'ho detto così" se non hai imparato i problemi che l'OA affronta. –