开发者社区 问答 正文

如何定义架构分层传输对象

QQ截图20200601113151.png QQ截图20200601112614.png

上图是阿里巴巴开发文档上定义的规范约束

问题一:

是不是每个层都有自己的输出对象,及输入对象?

例如:

DAO层:输出对象为DO,输入对象Query

SERVICE层:输出对象为BO,输入对象Query

VIEW层:输出对象为VO,输入对象Query

问题二:

每一层的输入对象Query,不是同一个对象,只是对象名称一样,但在不同包里,是这样理解吗?

例如:

DAO层:com.xxx.dao.Query

SERVICE层:com.xxx.service.Query

VIEW层:com.xxx.view.Query

问题三:

按照上面所说,共有6个传输对象,那对象之间如何进行转换?涉及到如下转换问题:

1、属性名称相同,类型不同;

2、类型相同,属性名称不同;

我已代码测试过,Apache BeanUtils 性能让人担忧,而 Spring BeanUtils 功能太少。

问题四:

以下哪种方式定义属性名称会更好些呢?

方式一:

private Integer id;
private String username;
private String password;
private Date updateTime;
private Date createTime;
private Set<RoleUserDO> roleUserDOs = new HashSet<RoleUserDO>(0); // 注意这里
private Set<ActionUserDO> actionUserDOs = new HashSet<ActionUserDO>(0); // 注意这里

方式二:

private Integer id;
private String username;
private String password;
private Date updateTime;
private Date createTime;
private Set<RoleUserDO> roleUsers = new HashSet<RoleUserDO>(0); // 注意这里
private Set<ActionUserDO> actionUsers = new HashSet<ActionUserDO>(0); // 注意这里

求各路大神指点迷津!!!

展开
收起
1910390006155544 2020-06-01 12:03:44 502 分享 版权
阿里云 AI 助理回答

问题一:在传统的分层架构中,确实每个层级都有其特定的职责和数据传输对象(DTO)。您提到的DAO、SERVICE、VIEW层分别处理数据访问、业务逻辑和服务展示,它们各自使用不同的数据对象来封装信息。DO(Data Object)通常用于数据库操作,BO(Business Object)用于封装业务逻辑相关的数据,VO(View Object)则面向用户界面展示。输入对象如Query,可以理解为不同层之间传递请求参数的载体,但具体实现会根据项目需求和设计模式有所不同。

问题二:理论上,为了清晰地分离关注点,不同层的Query类虽然可能具有相似的名称以表达其功能(即作为查询条件),但实际上它们可以位于不同的包中,并且根据所在层的需要进行定制化设计。这意味着即使名字相同,它们也可以是完全不同的类,承担各自的职责。不过,在实际开发中,为了减少代码冗余和提高可维护性,有时也会通过继承或接口共享通用的查询逻辑。

问题三:对象之间的转换是一个常见的问题,尤其是在多层架构中。对于属性名称相同但类型不同,或者类型相同但属性名称不同的情况,可以考虑以下几种方法: - 自定义转换器:利用Java 8的流(Stream) API或自定义转换方法来手动映射。 - ModelMapper:一个流行的Java库,提供了强大的配置选项来处理复杂的对象映射问题,包括类型转换和命名约定不匹配的情况。 - MapStruct:一个代码生成器,可以在编译时自动创建映射器类,大大简化了对象之间的转换过程,同时支持自定义转换逻辑。 - Spring ConversionService:Spring框架提供的服务,允许注册自定义转换器,适用于Spring应用中。

问题四:关于属性命名,这更多依赖于团队的编码规范和个人偏好。方式一更倾向于明确表示对象的数据类型(如roleUserDOs),这种方式在阅读代码时能快速了解集合内元素的具体类型。而方式二(如roleUsers)则更加简洁,侧重于描述集合的内容而不强调技术细节。选择哪种方式取决于项目的整体命名风格和对可读性的要求。一般而言,如果项目中已经有一套成熟的命名规则,建议遵循该规则以保持一致性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答