MVC Onion 架构,一些问题
MVC Onion architecture, some questions
我正在使用 Asp.net MVC 5、Web Api 2 和 Entity Framework 创建一个项目。我正在用洋葱架构设计它,所以我有 DAL、服务和 UI 层。
我的 DAL 层包含一个 UnitOfWork 和存储库,我的服务层包含业务案例服务。
但我有以下问题:
我在哪里使用工作单元保存(或提交)方法?在服务层还是在UI层?
如果我在服务层使用它,我如何处理跨越多个服务的情况?
我正在使用 DTO 进行 webapi 操作,服务层 return DTO 或映射应该在 UI 层完成吗?
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);
}
服务层应该 return 您的业务实体,任何以网络 communication/json 格式化为目的的映射都应该在 Web api 中完成。这允许最大程度地重用您的服务。
如果 DTO 指的是您在 wire/json 序列化中使用的对象,那么它们应该与 Web Api 保持在同一个项目中。这可能是也可能不是您拥有 UI 的同一个项目。如果您使用 Web Api,我建议使用像 FluentValidation 这样的验证库。
使用 C#、EF、Web 的 Onion 架构示例 https://github.com/carbonrobot/FullStackEF Api
我正在使用 Asp.net MVC 5、Web Api 2 和 Entity Framework 创建一个项目。我正在用洋葱架构设计它,所以我有 DAL、服务和 UI 层。
我的 DAL 层包含一个 UnitOfWork 和存储库,我的服务层包含业务案例服务。
但我有以下问题:
我在哪里使用工作单元保存(或提交)方法?在服务层还是在UI层? 如果我在服务层使用它,我如何处理跨越多个服务的情况?
我正在使用 DTO 进行 webapi 操作,服务层 return DTO 或映射应该在 UI 层完成吗?
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);
}
服务层应该 return 您的业务实体,任何以网络 communication/json 格式化为目的的映射都应该在 Web api 中完成。这允许最大程度地重用您的服务。
如果 DTO 指的是您在 wire/json 序列化中使用的对象,那么它们应该与 Web Api 保持在同一个项目中。这可能是也可能不是您拥有 UI 的同一个项目。如果您使用 Web Api,我建议使用像 FluentValidation 这样的验证库。
使用 C#、EF、Web 的 Onion 架构示例 https://github.com/carbonrobot/FullStackEF Api