Я плохо знаком с объектно-ориентированным программированием и медленно изучаю, как применить его к JavaScript. Поэтому терпите меня.:)
У меня есть два основных объекта:
"запись", которая содержит методы для редактирования единственной записи от recordset. (создайте, сохраните, загрузитесь, и т.д.),
"recordList", который содержит методы для вывода нумеровавшего страницы списка документально подтвержденных правовых титулов.
Я хотел бы за эти объекты смочь сотрудничать. Например, если record.save () называют, recordList.refresh () также назван, так, чтобы нумеровавший страницы список отразил обновленные данные.
Для выполнения этого я создал третье объектное "управление", которое содержит экземпляры и "записи" и "recordList". Я использую "управление" следующим способом:
control = {}
control.record = object.create("record");
control.recordList = object.create("recordList");
control.save = function() {
this.record.save();
this.recordList.refresh();
};
Это работает. Но я задаюсь вопросом, действительно ли это является надлежащим? (Я хочу быть уверенным, что я не нарушаю ни одного из правил дизайна 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();
};
};
Что-то, что нужно отметить в этом коде. В этой настройке невозможно получить доступ к currentRecord и recordList извне функции, и поэтому у вас есть инкапсуляция, одна из отличительных черт ООП. Это связано с тем, что функция набора записей является закрытием, которое «закрывает» все переменные внутри, а это означает, что каждая функция внутри имеет доступ к переменным в области набора записей.
Вы можете позволить внешнему миру получить доступ с помощью функций get или set:
me.getRecordList = function() {
return recordList.getArray(); //Not generally a good idea to simply return your internal object
};
Если я чему-то и научился со временем, так это тому, что следование любой парадигме до буквы приведет к большему разочарованию и трудностям, чем если бы вы взяли концепцию настолько далеко, насколько это возможно, и использовали здравый смысл для определения отклонений.
Тем не менее, ваше решение будет работать хорошо, и это нормально - создавать класс-контейнер для нескольких объектов различных типов, которые связаны между собой. Если вам нужен другой способ решения этой проблемы, ознакомьтесь с Client Event Pooling. Единственное, что я могу сказать о том, что вы сделали, - это убедиться, что вы используете object.create так, как это было задумано.
Используя этот метод, вы можете создать событие, которое при срабатывании будет выполнять ряд других команд, связанных с вашим событием. Я использовал это с большим успехом в самых разных приложениях, начиная от целевого подключения событий и заканчивая упрощением инъекций javascript после постбэка.
Удачи.
Ваше решение в порядке. Два небольших предложения по улучшению
Используйте более конкретное имя, чем control (даже 'recordControl' подойдет). В итоге вы можете получить множество элементов управления для различных наборов функций.
Используйте объектный литерал для создания всего объекта. Это делает ваш код более аккуратным и читабельным (и экономит несколько байт)
(извините за отсутствие интервалов - редактор не делает то, что я хочу!)
recordControl = {
record : object.create("record"),
recordList : object.create("recordList"),
save : function() {
this.record.save();
this.recordList.refresh();
}
}
почему вы не передаете ваш recordList в record?
var record = object.create("record");
record.recordList = object.create('recordList');
record.save = function(){
/*
do something
*/
this.recordList.refresh();
}