use*_*476 5 c# n-tier-architecture asp.net-mvc-4
工具:Mvc4,Sql server,Nhibernate
我正在学习Ntier架构,并计划用一个小例子来学习.这将是一个学生注册申请表,其中包含一份表格.名字b.姓氏c.地址d.学生ID该应用程序将能够.通过Id b获得学生.得到所有学生c.注册新生/保存学生d.编辑学生e.删除学生
我打算有以下几层
表示层(单独项目mvc 4应用程序)
---学生表格的html就在这里.我可以在这里使用jquery等 - 我的控制器将调用该服务
服务层(单独的项目:类库项目.在这种情况下,只有web将是我的客户端.我将学习稍后在另一个项目中使用webAPI或wcf)
---学生服务在这里
---这里是IstudentService
业务层:(单独项目:类库项目)??
数据层:(单独项目:类库项目)??
数据库:( sql server database)
现在我感到困惑,我的问题是:
我将在哪里创建我的学生模型(哪一层?)
对于这个学生的例子,我将在我的业务层写什么?
什么将进入我的数据层?我会写哪种方法?它们是直接与数据库通信的方法吗?
一些例子会很棒.我会寻找一个好的IOC容器.
以下是示例代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
你需要看看洋葱架构。就 MVC 版本而言,它有点过时了,但层次分得很清楚。
就 IoC 容器而言,我建议查看Autofac - 易于使用,具有很多功能,例如按约定注册和多租户。
至于你的问题:
我通常有的是在表单提交上,控制器会收到StudentViewModel提交的内容,然后我会将其转换为Student对象并移交给IStudentRepository注入到控制器中的对象。并将IStudentRepositry其保存到DBContext中。存储库接口将位于域层,但存储库的实现将位于数据层。DI 容器会将其中一个与另一个进行匹配。
这里的技巧是将域层中的所有接口和实现放在它们应该在的地方。并且域层不应该依赖于任何其他层(域项目不会引用数据和Web项目)。但 Web 将依赖于数据层和域层。你只需要Web层中的数据层依赖来配置IoC容器,因为Web层是你的聚合根,IoC应该在那里配置。但是您不应该在任何操作中直接使用数据对象,您应该为存储库或服务注入接口。
关于分层架构已经有很多讨论了,所以首先从洋葱架构开始,然后你就会更好地了解你需要什么。