我是面向对象编程的新手,正在慢慢学习如何将它应用于javascript.所以请耐心等待.:)
我有两个基本对象:
"record",包含从记录集编辑单个记录的方法.(创建,保存,加载等)
"recordList",其中包含用于输出分页记录标题列表的方法.
我希望这些对象能够一起工作.例如,如果调用record.save(),则还会调用recordList.refresh(),以便分页列表反映更新的数据.
为了实现这一点,我创建了第三个对象"control",它包含"record"和"recordList"的实例.我以下列方式使用"控制":
control = {}
control.record = object.create("record");
control.recordList = object.create("recordList");
control.save = function() {
this.record.save();
this.recordList.refresh();
};
Run Code Online (Sandbox Code Playgroud)
这有效.但我想知道,这是正确的吗?(我想确保在执行此操作时我没有违反OO设计的任何规则.)有更好的方法吗?
在此先感谢您的帮助.
从面向对象编程的角度来看,我认为记录不会自我拯救。数据库中的记录只是数据,数据库本身就是对这些数据进行处理的,无论是保存还是加载等等。话虽这么说,我会让记录只是一个保存数据的对象,并创建一个记录集对象用于与数据交互。在该记录集对象中,您可以放置记录列表并相应地更新它。就像是:
var recordset = function() {
var me = this;
var currentRecord = object.create("record");
var recordList = object.create("recordList");
me.save = function() {
//Insert record.save code here
recordList.refresh();
};
};
Run Code Online (Sandbox Code Playgroud)
关于该代码需要注意的一些事情。在该设置中,无法从函数外部访问 currentRecord 和 recordList,因此您拥有封装,这是 OOP 的标志之一。这是因为记录集函数是一个“封闭”其中所有变量的闭包,这意味着其中的每个函数都可以访问记录集范围内的变量。
您可以让外界通过 get 或 set 函数进行访问:
me.getRecordList = function() {
return recordList.getArray(); //Not generally a good idea to simply return your internal object
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
184 次 |
最近记录: |