electron是关于将web页面打包成独立客户端的库,内置了浏览器,方便了客户端开发。
那么关于客户端数据持久化交互和数据处理该用何种方式书写,在此进行了一下思考。
如下图:此为electron应用后台目录结构
ao
代表实体类,可以认为是entity,有静态方法check,针对前端传的数据进行校验,给出相应返回
import { ResFul, isNull } from "../utils";
export default class Person {
constructor(name, age, id) {
this.name = name;
this.age = age;
this.id = id;
}
static check(arg) {
if (isNull(arg["name"])) {
return ResFul.error(202, "请输入名称");
}
if (isNull(arg["age"])) {
return ResFul.error(202, "请输入年龄");
}
if (isNull(arg["id"])) {
return ResFul.error(202, "缺少id");
}
return new Person(arg.name, arg.age, arg.id);
}
}
controller
数据接口层,或者说中转站
ipcMain.handle("editPerson", async (event, arg) => {
try {
const person=Person.check(arg)
if(person instaceof ResFul){
return person
}
const personList= personService.edit(person)
return ResFul.success(personList);
} catch (error) {
return ResFul.error(203, "系统异常");
}
});
ResFul
统一接口返回格式,如下
export class ResFul {
constructor(code, data, message) {
(this.code = code), (this.data = data);
this.message = message;
}
static success(data) {
return new ResFul(200, data, "请求成功");
}
static error(code, data) {
return new ResFul(code, data, data);
}
}
service
service调用dao层,dao层统一用electron-store代替
export default class PersonService {
constructor() {
let option = {
name: "person",
fileExtension: "json",
cwd: __static + "\\db",
};
this.store = new Store(option);
}
edit(person){
this.store.set(person.id,person)
}
}