在JavaScript中使用解耦的模块/对象
我对JS中面向对象编程和模块化项目结构的理解是,尽可能地解耦对象/模块是最佳实践。例如,假设我有以下两个解耦模块:在JavaScript中使用解耦的模块/对象,javascript,module,decoupling,Javascript,Module,Decoupling,我对JS中面向对象编程和模块化项目结构的理解是,尽可能地解耦对象/模块是最佳实践。例如,假设我有以下两个解耦模块: // person.js module.exports = function() { this.firstName: ''; this.lastName: ''; }; // occasion.js module.exports = function() { this.title: ''; this.date: ''; }; 当这些模块实例化时,
// person.js
module.exports = function() {
this.firstName: '';
this.lastName: '';
};
// occasion.js
module.exports = function() {
this.title: '';
this.date: '';
};
当这些模块实例化时,对象将保存该类型的相关数据。但是,假设我有另一个模块使用两种类型的数据:
// invitation.js
module.exports = function() {
this.eventTitle: '';
this.eventDate: '';
this.sendTo: '';
}
此模块的实例需要从场合
对象获取标题
和日期
,还需要从个人
对象获取并连接名字
和姓氏
显然,为了能够从两种特定的对象类型中获取信息,并将它们组合成另一种类型,我必须有一个功能或一些高度耦合的东西,即理解所有相关模块的结构的东西
考虑到面向对象编程和调制代码管理方法的最佳实践,这些转换器、缝合器、控制器(无论您如何称呼它们)应该如何在项目中实现
1) 我是否为每个可能的交互创建一个模块,该交互使用单个内置方法导出对象?e、 g
//person-and-occasion-to-invitation.js
module.exports = function() {
this.getInvitation = function(person, occasion) {
var invitation = new Invitation();
invitation.eventTitle = occasion.title;
invitation.eventDate = occasion.date;
invitation.sendTo = person.firstName + ' ' + person.lastName;
return invitation;
};
};
//person-and-occasion-to-invitation.js
module.exports = function(person, occasion) {
var invitation = new Invitation();
invitation.eventTitle = occasion.title;
invitation.eventDate = occasion.date;
invitation.sendTo = person.firstName + ' ' + person.lastName;
return invitation;
};
仅仅为了执行一项任务而实例化一个对象似乎很愚蠢,而我的模块文件夹很快就会被填满
2) 我是否为导出单个方法的每个可能的交互创建一个模块?e、 g
//person-and-occasion-to-invitation.js
module.exports = function() {
this.getInvitation = function(person, occasion) {
var invitation = new Invitation();
invitation.eventTitle = occasion.title;
invitation.eventDate = occasion.date;
invitation.sendTo = person.firstName + ' ' + person.lastName;
return invitation;
};
};
//person-and-occasion-to-invitation.js
module.exports = function(person, occasion) {
var invitation = new Invitation();
invitation.eventTitle = occasion.title;
invitation.eventDate = occasion.date;
invitation.sendTo = person.firstName + ' ' + person.lastName;
return invitation;
};
再一次,我的模块文件夹会很快被填满,而且在OOP中,不是所有的东西都应该包含在一个对象中吗
3) 我是否创建了一个包含所有可能交互的模块?e、 g
//interactions.js
module.exports = function() {
this.personAndOccasionToInvitation = function(person, occasion) {
var invitation = new Invitation();
invitation.eventTitle = occasion.title;
invitation.eventDate = occasion.date;
invitation.sendTo = person.firstName + ' ' + person.lastName;
return invitation;
};
};
这将使我的模块文件夹更干净,但它可能会变得很长,我觉得它正在创建一个上帝对象
处理解耦模块时的最佳/常用做法是什么?有人能解释一下方法并提供一些例子吗?“在OOP中,不是所有的东西都应该包含在一个对象中吗?”-没有。您正在编写JavaScript,一种函数式语言,而不是Java。