我正在使用Asp.net MVC 5,Web Api 2和Entity Framework创建一个项目。我正在使用Onion架构进行设计,因此我有一个DAL,Service和UI层。
我的DAL层包含UnitOfWork和存储库,我的服务层包含业务案例服务。
但我有以下问题:
在服务层或UI层中,我在哪里使用工作单元保存(或提交)方法? 如果我在服务层使用它,我如何处理跨多个服务的案例?
我正在使用DTO进行webapi操作,如果服务层返回DTO还是映射应该在UI层中完成?
DTO应该在单独的项目中还是在UI项目中?如果他们在一个单独的项目中,我应该使用MVC属性进行验证吗?
答案 0 :(得分:6)
您的工作单元应存在于服务层中。每次调用服务都包含一个工作单元内的业务事务。
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);
}
服务层应该返回您的业务实体,任何用于网络通信/ json格式化的映射都应该在web api中完成。这样可以最大限度地重复使用您的服务。
如果您通过DTO指的是用于跨线/ json序列化的对象,那么它们应该与Web Api保持在同一个项目中。这可能与您拥有UI的项目相同,也可能不同。如果您使用Web Api,我建议使用FluentValidation等验证库。
使用C#,EF,Web Api
的洋葱架构https://github.com/carbonrobot/FullStackEF的示例