
上图是阿里巴巴开发文档上定义的规范约束
问题一:
是不是每个层都有自己的输出对象,及输入对象?
例如:
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); // 注意这里
求各路大神指点迷津!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题一:在传统的分层架构中,确实每个层级都有其特定的职责和数据传输对象(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)则更加简洁,侧重于描述集合的内容而不强调技术细节。选择哪种方式取决于项目的整体命名风格和对可读性的要求。一般而言,如果项目中已经有一套成熟的命名规则,建议遵循该规则以保持一致性。