大家都是怎样开发后台的? 在多年的经验中,我总结了四类方法,一定要看到第四种哦!
1、手动coding
从零开始撸,先开发用户管理,再开发角色菜单,然后再开发各种业务功能,一个月以后,经过几次加班,终于开发完成,感觉自己变秃了也变强了(PS:如果是大神当我没说)
2、代码生成器
将业务抽象为数据库表,通过数据库表反向生成代码,就Java为例:要生成template、controller、service、dao、entity、mapper大概六个文件!项目跑起来很高兴,再修修补补就可以上线了,多日后产品经理要求改功能,生成的代码已经修改过一遍,再生成代码覆盖合并代码的工作量也不小,但是改一个功能就要把这六个文件改一遍,何况多个,好难😢
3、公司自研后台管理系统
经过公司多年的积累做过大量项目,最早写过的一套后台可以反复使用无数次,修修补补,还能再战3个项目!
4、使用erupt
零前端代码,且template、controller、service、dao、entity、mapper啥的通通不要,就一个文件,加上点注解就好了~
开发一个新闻发布系统:
@Erupt(name = "新闻发布")
@Entity
@Table(name = "t_article")
public class Article extends BaseModel {
@EruptField(
views = @View(title = "封面图"),
edit = @Edit(title = "封面图", type = EditType.ATTACHMENT,
attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
)
private String pic;
@EruptField(
views = @View(title = "标题"),
edit = @Edit(title = "标题", notNull = true, search = @Search)
)
private String title;
@EruptField(
views = @View(title = "发布状态"),
edit = @Edit(title = "发布状态", notNull = true, boolType = @BoolType(trueText = "发布", falseText = "草稿"))
)
private Boolean publish;
@Lob
@EruptField(
views = @View(title = "内容", type = ViewType.HTML),
edit =
@Edit(title = "内容", type = EditType.HTML_EDITOR, notNull = true)
)
private String content;
@Lob
@EruptField(
views = @View(title = "备注"),
edit = @Edit(title = "备注", type = EditType.TEXTAREA)
)
private String remark;
}
再开发一个图床管理的功能
@Erupt(
name = "图床管理",
dataProxy = Pictures.class,
power = @Power(edit = false)
)
@Table(name = "picture")
@Entity
@Getter
@Setter
@AllowModify
public class Pictures extends HyperModel implements DataProxy<Pictures> {
@EruptField(
views = {
@View(title = "缩略图", type = ViewType.IMAGE)
},
edit = @Edit(title = "图片地址", notNull = true, type = EditType.ATTACHMENT)
)
private String filePath;
@EruptField(
views = @View(title = "大小", template = "(value/1024/1024).toFixed(2) + 'MB'")
)
private Integer sizes;
@EruptField(
views = @View(title = "宽度"),
edit = @Edit(title = "宽度", show = false, search = @Search(vague = true))
)
private Integer width;
@EruptField(
views = @View(title = "高度"),
edit = @Edit(title = "高度", show = false, search = @Search(vague = true))
)
private Integer height;
@EruptField(
views = {
@View(title = "备注")
},
edit = @Edit(title = "图片备注", type = EditType.TEXTAREA)
)
private String remark;
@SneakyThrows
@Override
public void beforeAdd(Pictures pictures) {
String fileDomain = new QiniuOosProxy().fileDomain();
HttpResponse httpResponse = HttpUtil.createGet(fileDomain + pictures.getFilePath()).execute();
BufferedImage bufferedImage = ImageIO.read(httpResponse.bodyStream());
pictures.setHeight(bufferedImage.getHeight());
pictures.setWidth(bufferedImage.getWidth());
pictures.setSizes(httpResponse.bodyBytes().length);
}
}
图床管理中使用了dataProxy注解配置,代理了add方法并且进行了相关逻辑的处理
开发完成,可以下班了😝…
效率就是这么高,摆脱常年CURD的恐惧,专注核心逻辑!
官网提供有很多示例,其中包括电商系统、博客系统、用户权限管理等。