能否将AutoMapper Profile放置在.NET Core Web API的业务层中?
把AutoMapper的Profile类放在业务层类库不仅是可行的,反而更符合分层架构的设计理念,下面从几个核心角度给你解释:
职责分离的核心要求:业务层作为核心业务逻辑的载体,本身就负责领域模型与DTO(数据传输对象)之间的转换规则——这本质上属于业务逻辑的一部分。将映射逻辑放在业务层,能让主应用(Web API项目)专注于API路由、中间件配置、请求响应处理等基础设施层面的工作,避免职责混乱。
AutoMapper的原生支持:AutoMapper从设计上就允许你在任何程序集中定义
Profile类,它并不强制要求Profile必须和主应用同属一个项目。在ASP.NET Core 2.0中,你只需要在启动配置时,告诉AutoMapper去扫描包含业务层Profile的程序集即可,比如通过services.AddAutoMapper(typeof(YourBusinessLayerProfile))这种方式,AutoMapper会自动找到并加载所有相关的Profile配置。复用性的提升:如果后续有其他项目(比如控制台服务、另一个Web应用)需要复用这套业务逻辑,直接引用业务层类库就能同步复用所有映射规则,无需重复编写相同的映射代码,大大降低了冗余度。
维护性的优化:当业务模型或DTO发生变更时,你只需要在业务层对应的
Profile中修改配置,不用跨项目查找修改点,逻辑关联更紧密,维护起来更高效。
简单来说,没有任何规则强制要求你把所有映射放在主应用的Profile里,分层架构下,把相关逻辑归属到对应的层级才是更合理的实践。
内容的提问来源于stack exchange,提问作者M. Carlo Bramini

