javascript中的类型化不可变对象
我正在尝试在React-Flux类应用程序中组织数据类型。我所有的数据对象都是不可变的,对于集合,我使用immutable.js,这是一个完美的库。但对于类型化对象,我使用自己的类。我认为这不是最好的解决方案,但我需要以某种方式处理默认值、内部一致性、数据验证、向该对象添加方法等javascript中的类型化不可变对象,javascript,reactjs,immutability,reactjs-flux,immutable.js,Javascript,Reactjs,Immutability,Reactjs Flux,Immutable.js,我正在尝试在React-Flux类应用程序中组织数据类型。我所有的数据对象都是不可变的,对于集合,我使用immutable.js,这是一个完美的库。但对于类型化对象,我使用自己的类。我认为这不是最好的解决方案,但我需要以某种方式处理默认值、内部一致性、数据验证、向该对象添加方法等 有没有专门的图书馆 您是否也为此类对象使用immutable.js集合?那么您在其他地方处理数据、验证和其他功能的一致性 还是使用普通类 您认为在基于React/Flux的应用程序中使用类型化对象是个好主意吗 下面
- 有没有专门的图书馆
- 您是否也为此类对象使用immutable.js集合?那么您在其他地方处理数据、验证和其他功能的一致性
- 还是使用普通类
- 您认为在基于React/Flux的应用程序中使用类型化对象是个好主意吗李>
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())
类事件扩展MyImmutableLib{
建造师(普通){
this.start=plain.start;
this.end=plain.end;
this.name=plain.name | |“未命名事件”;//一些默认值
this.attendars=plain.attendars | |[];
this.valid=plain.start
最好是有以下设施的图书馆:
- 类型化对象—这样我可以更好地组织数据
- 默认值
- 验证
- 方法
- 不变性特定函数