- 系统需要分层有哪些好处?
- 你在项目中用过哪种设计模式?结合业务场景给出使用这个设计模式的理由。
- 从网盘下载课程的建表脚本在本地建表,基于t_user、t_role和t_user_role三张表练习多多对查询。
系统需要分层有哪些好处?
1.职责分明,分层后高层只需要知道底层能实现的功能,不会关心实现的过程。
2.代码分离,易于扩展,且在系统扩展时,方便将每个模块转为微服务。
(mybatis将系统分为3层,且每层的每个模块全都独立。基础层,核心处理层,接口层。)
你在项目中用过哪种设计模式?结合业务场景给出使用这个设计模式的理由。这个设计模式在遵循什么设计原则?
1.单例模式 保证对象单一,全局不会变化的对象适合使用。但注意创建对象的代码考虑多线程安全问题。
2.工厂模式 不参加对象创建,在使用一个对象的时候不必要关心创建的过程,直接从工厂中拿出要使用的对象。
3.建造者模式,完全参加决定对象创建的结果,但是不会管在创建对象中有多复杂的过程,只是觉得重要的参数。
4.门面模式,只暴露出简单的入口,即可使用。无需关心后面复杂的实现形式。
5.适配器模式,将其他人的接口加上一层转接头,可以保证在其他人代码发生变化时,或者换使用的时,只需要更好转接头就可以。
6.模板模式,在多个实现类实现同一个接口的情况下,每个实现类要实现的接口不同,可以通过重写模板的制定方法确定跳过某些不需要的实现接口。
7.装饰模式,可以对实现同一个接口的不同实现类进行增强,从而轻易的组合,将增强模块实现随意拼接。
8.动态代理模式,动态代理模式可以,动态的创建同一个接口的不同实现类,而去执行接口的方法,在执行方法时也可以进行方法的增强。动态创建的接口以$proxy开头。
调用方法
@Test
public void selectManyToMany(){
SqlSession sqlSession = sqlSessionFactory.openSession();
TUserMapper userMapper = sqlSession.getMapper(TUserMapper.class);
List<TUser> users = userMapper.selectUserRole();
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i).toString());
if (users.get(i).getRoles()!=null){
List<TRole> roles = users.get(i).getRoles();
for (int j = 0; j < roles.size(); j++) {
System.out.println(roles.get(j).toString());
}
}
}
}
xml文件代码
<resultMap type="TUser" id="userRoleInfo" extends="BaseResultMap">
<collection property="roles" ofType="TRole" columnPrefix="role_">
<result column="id" property="id" />
<result column="Name" property="roleName" />
<result column="note" property="note" />
</collection>
</resultMap>
<select id="selectUserRole" resultMap="userRoleInfo">
select a.id,
a.userName,
a.realName,
a.sex,
a.mobile,
a.note,
b.role_id,
c.role_name,
c.note role_note
from t_user a,
t_user_role b,
t_role c
where a.id = b.user_id AND
b.role_id = c.id
</select>
lison老师说:
分层优势
1.让代码维护性更高,每个层都有定位,每个层的每个组件脉络清晰
2.方便团队开发,提高协作开发。团队分工明确,开发人员专注提升。
3.提高系统伸缩性与性能,将每层调用接口明确,方便将逻辑分层改为物理分层,提高系统抗压性。
享学课堂学习笔记