Как правильно спроектировать классы? Допустим, у нас есть класс Employe и Company. Я хочу реализовать связь между этими двумя классами. У класса Employe будет поле company, в котором будет храниться экземпляр класса Company. У класса Company будет поле employes, которое представляло бы собой массив экземпляров класса Employe. На js получилось бы что-то вроде этого:function Employe(firstName, company) { this.firtsName = name; this.company = company; } function Company(name, employes) { this.name = name; this.employes = employes; } Верен ли такой подход к проектированию? Если да, то следующий вопрос: как лучше всего реализовать методы, которые бы контролировали состояния этих двух классов? Если, например, у экземпляра класса Employe измениться поле company, то у двух соответствующих экземпляров класса Company должны так же измениться поля. Как это лучше реализовать?
Подход к проектированию классов Employe и Company вполне верен. Для контроля состояний объектов классов можно использовать геттеры и сеттеры. В данном случае, например, можно создать методы в классе Employe для изменения поля company:
function Employe(firstName, company) { this.firstName = name; this.company = company; this.setCompany = function(newCompany) { this.company = newCompany; newCompany.addEmploye(this); // добавим этот экземпляр Employe в массив employes у новой компании } } function Company(name, employes) { this.name = name; this.employes = employes || []; this.addEmploye = function(employe){ this.employes.push(employe); } }
Таким образом, при изменении компании у экземпляра класса Employe, мы вызываем соответствующий метод в классе Company для добавления этого сотрудника. В этом примере используются простые методы, но для большей гибкости и управления состоянием, можно использовать геттеры и сеттеры или даже реализовать шаблон проектирования "Наблюдатель" (Observer pattern), чтобы уведомлять другие объекты об изменениях в текущем объекте.
Подход к проектированию классов Employe и Company вполне верен. Для контроля состояний объектов классов можно использовать геттеры и сеттеры. В данном случае, например, можно создать методы в классе Employe для изменения поля company:
function Employe(firstName, company) {this.firstName = name;
this.company = company;
this.setCompany = function(newCompany) {
this.company = newCompany;
newCompany.addEmploye(this); // добавим этот экземпляр Employe в массив employes у новой компании
}
}
function Company(name, employes) {
this.name = name;
this.employes = employes || [];
this.addEmploye = function(employe){
this.employes.push(employe);
}
}
Таким образом, при изменении компании у экземпляра класса Employe, мы вызываем соответствующий метод в классе Company для добавления этого сотрудника. В этом примере используются простые методы, но для большей гибкости и управления состоянием, можно использовать геттеры и сеттеры или даже реализовать шаблон проектирования "Наблюдатель" (Observer pattern), чтобы уведомлять другие объекты об изменениях в текущем объекте.