我正在尝试在类似React Flux的应用程序中组织数据类型。我的所有数据对象都是不可变的,对于我正在使用immutable.js的集合,这是完美的库。但对于键入的对象,我使用自己的类。我不认为这是最好的解决方案,但我需要以某种方式处理默认值,内部一致性,数据验证,向该对象添加方法等。
这是我的意思是什么样的对象的例子,以及我如何使用它的简单示例。
class Event extends MyImmutableLib {
constructor(plain) {
this.start = plain.start;
this.end = plain.end;
this.name = plain.name || "unnamed event"; // some default value
this.attendants = plain.attendants || [];
this.valid = plain.start < plain.end; // simple check of validity, I can also throw exception if it is needed
Object.freeze(this); // I use freeze to be sure I don't accidentally change the object
}
getDuration() {
return this.end - plain.start; // methods are sometimes useful
}
addAttendant(newPerson) {
return this.set("attendants", this.attendants.concat([newPerson])) //immutable edit, so I return new object
}
}
var someEvent = new Event({start: new Date("2015-02-29"), end: new Date("2012-02-30")}) //
var jsMeetup = someEvent.set("name", "9th Js Meetup, Brno")
var jsMeetup = jsMeetup.addAttendant("Joe");
console.log(jsMeetup.name, jsMeetup.getDuration())
最好的是一些图书馆: