Что надлежащий путь к связанным с управлением объектам в JavaScript?

Я плохо знаком с объектно-ориентированным программированием и медленно изучаю, как применить его к JavaScript. Поэтому терпите меня.:)

У меня есть два основных объекта:

  1. "запись", которая содержит методы для редактирования единственной записи от recordset. (создайте, сохраните, загрузитесь, и т.д.),

  2. "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 в выполнении этого.) Там лучший путь?

Заранее спасибо за Вашу справку.

7
задан Travis 17 February 2010 в 13:31
поделиться

4 ответа

Если говорить с точки зрения ООП, я не думаю, что запись могла бы спасти себя. Запись в базе данных - это просто данные, а сама база данных - это то, что делает что-то с этими данными, будь то сохранение или загрузка и т. Д. При этом я бы сделал запись просто объектом, который хранит данные и создаст объект набора записей. для взаимодействия с данными.Внутри этого объекта набора записей вы можете поместить свой список записей и соответствующим образом обновить его. Что-то вроде:

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
    };
1
ответ дан 7 December 2019 в 18:42
поделиться

Если я чему-то и научился со временем, так это тому, что следование любой парадигме до буквы приведет к большему разочарованию и трудностям, чем если бы вы взяли концепцию настолько далеко, насколько это возможно, и использовали здравый смысл для определения отклонений.

Тем не менее, ваше решение будет работать хорошо, и это нормально - создавать класс-контейнер для нескольких объектов различных типов, которые связаны между собой. Если вам нужен другой способ решения этой проблемы, ознакомьтесь с Client Event Pooling. Единственное, что я могу сказать о том, что вы сделали, - это убедиться, что вы используете object.create так, как это было задумано.

Используя этот метод, вы можете создать событие, которое при срабатывании будет выполнять ряд других команд, связанных с вашим событием. Я использовал это с большим успехом в самых разных приложениях, начиная от целевого подключения событий и заканчивая упрощением инъекций javascript после постбэка.

Удачи.

0
ответ дан 7 December 2019 в 18:42
поделиться

Ваше решение в порядке. Два небольших предложения по улучшению

  1. Используйте более конкретное имя, чем control (даже 'recordControl' подойдет). В итоге вы можете получить множество элементов управления для различных наборов функций.

  2. Используйте объектный литерал для создания всего объекта. Это делает ваш код более аккуратным и читабельным (и экономит несколько байт)

(извините за отсутствие интервалов - редактор не делает то, что я хочу!)

    recordControl = {
        record : object.create("record"),
        recordList : object.create("recordList"),
        save : function() {
            this.record.save();
            this.recordList.refresh();
        }
    }
1
ответ дан 7 December 2019 в 18:42
поделиться

почему вы не передаете ваш recordList в record?

var record = object.create("record");
record.recordList = object.create('recordList');
record.save = function(){
    /*
        do something 
    */
    this.recordList.refresh();
}
0
ответ дан 7 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: