做项目之前,开发者都得有一个好的规划,关于 Controller,Service,Dao,Entity 的规划,但是好的规划也会根据所用的框架,例如 MVC 和 ORM,以及是否有多数据源来做调整
大家在开发前的规划,让各位对各自项目作出了怎样的规划?
我先说一下,我开发过的其中一个项目的规划
Spring + Spring mvc+mybatis+tk.mybatis SSM,这个搭配应该算是前年主流常规的把,首先是包的分类
com 模块根包 com.xxx1 子模块 1,com.xxx2 子模块 2,一个子模块,拥有的子包名称包括 Model,Service,Dao,Cache,Util,Config 其中任何一项 common 常用,存放常用的方法 config 配置项,配置 web 启动时调用的类加载初始化数据和持久层的配置,例如 mybaits 配置文件,web 过滤器 resources 存放配置文件 。用于生产环境配置调整
spring 扫描策略,不扫描 Service,只扫描 Controller 和 dao,Service 类不写 @service 注解。
在所有的实体类继承一个基类,基类有 Long id,LocalDate Create_date,LocalTime create_time 三个字段,
并且所有的实体类的内容添加如下代码: public static XXXDao dao; public static XXXService service=getSingleton(XXXService.class);代码,在 spring 开始启动后通过反射配置把扫描到的 dao 类实例添加到实体类里的 XXXDao 字段里进去,那样就不用了在搞什么 @autowired 注解写个 set 注入。
mybatis,手动编写 sql 语句,从来不把 sql 语句写在 xml 里,直接写在注解上。 通过 java 来配置级联删除策略
数据库方面的配置 数据库主键策略都采用整型或长整型,通过雪花算法或自增或序列分配 id,如果是通过序列分配主键的表,则序列起始从 10000 开始。 用户类除了主键,还有用户名,姓名,登录名,密码,标识 id 等字段,标识 id 是字符串类型,通过字符串 id 生成算法随机生成,用于让其他用户不通过主键 id 来能确认用户唯一
以上是我开发的一个单数据源的项目的规划概况,可能有些没说出来,各位开发项目,面临单数据源或多数据源,以及为了少写代码或着是开发体验,都做了哪些规划呢
1
opengps 2020-05-12 23:57:19 +08:00 via Android
规划要跟项目相匹配,不能是约束
你做个日均访问量 1000 的博客,那么怎么快怎么来,甚至可以直接页面代码里写 SQL 如果你要 200 人的团队做个日均 10 访问量的企业系统,反而需要各种分层架构 我以上数字举例的主要目的是为了说这句:架构对于开发团队的影响很大,然后才是业务规模大小。 |
2
a7217107 2020-05-13 14:53:54 +08:00
|
3
Aresxue 2020-05-13 15:25:08 +08:00
mybatis 的注解式 sql 是最鸡肋的一个,其它注解是比较先进的,但它和 sql 放一起可读性特别差, 如果有复杂 sql 不建议这么做。
至于使用 set 替换 autowired 其实是在搞复古,但如果想这么搞建议使用 Javasist 或者 asm 做字节码生成,看到大量重复无明显含义的代码很让人厌烦。 数据库那里应该是单库,那么直接用自增序列应该是性能最好且使用起来最方便的一种,标识 id 如果没有含义存在的价值就不大 多数据源生产实践中是大坑,能上分布式就上分布式,然后单应用就只连接一个库,想要做其它库操作直接调用其它模块 |
4
tctc4869 OP @a7217107
比如要创建多个 Controller 编写验证用户代码,例如判断用户是什么什么,按照我的方式,我可以通过 User.service.isExists(user_id),User.dao.getByid(loginName)实现, 如果我使用 @Autowired 的方式,先得写一个字段,还得取名字,叫什么 UserService userSerivce,在上面写个 @Autowired,然后写 set 方法实现 set 注入,然后以 userService.isExists(user_id),userService.getDao().getById 调用,感觉还不如把实体类相关的 dao 和 service 写在实体类内作为 public 访问权限的静态成员进行调用,省去“声明字段写 @Autowired 生成 set”更快更方便。 当然没有实体类的 dao 和 Service 是另一回事。 |