Esc*_*ar5 4 c# asp.net-mvc n-tier-architecture onion-architecture asp.net-web-api
我正在使用Asp.net MVC 5,Web Api 2和Entity Framework创建一个项目.我正在使用Onion架构进行设计,因此我有一个DAL,Service和UI层.
我的DAL层包含UnitOfWork和Repositories,我的Service层包含业务案例的服务.
但我有以下问题:
我在哪里使用工作单元保存(或提交)方法?,在服务层或UI层?如果我在服务层使用它,我该如何处理跨多个服务的案例?
如果服务层返回DTO或者映射应该在UI层中完成,我正在使用DTO进行webapi操作吗?
DTO应该在单独的项目中还是在UI项目中?如果他们在一个单独的项目中,我应该使用MVC属性进行验证吗?
您的工作单元应存在于服务层中.每次调用服务都包含单个工作单元内的业务事务.
public ServiceResponse<Patient> Save(Patient patient, string userName)
{
Func<Patient> func = delegate
{
Authorize(patient, userName);
Validate(patient, new PatientValidator());
using (var context = _contextFactory())
{
return context.Save(patient, userName);
}
};
return this.Execute(func);
}
Run Code Online (Sandbox Code Playgroud)
服务层应该返回您的业务实体,任何用于网络通信/ json格式化的映射都应该在web api中完成.这样可以最大程度地重用您的服务.
如果您通过DTO指的是您在wire/json序列化中使用的对象,那么它们应该与Web Api保持在同一个项目中.这可能与您拥有UI的项目相同,也可能不同.如果您使用Web Api,我建议使用像FluentValidation这样的验证库.
洋葱架构的一个例子https://github.com/carbonrobot/FullStackEF使用C#,EF,Web Api