关于electron后端书写的思考

173 阅读1分钟

electron是关于将web页面打包成独立客户端的库,内置了浏览器,方便了客户端开发。 那么关于客户端数据持久化交互和数据处理该用何种方式书写,在此进行了一下思考。 如下图:此为electron应用后台目录结构 image.png

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)
  }
}