在JavaScript中使用分离的模块/对象

时间:2016-03-22 21:53:57

标签: javascript module decoupling

我对JS中面向对象编程和模块化项目结构的理解是,尽可能多地解耦对象/模块是最佳实践。例如,假设我有以下两个解耦模块:

// 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: '';
}

此模块的实例需要从title个对象中获取dateOccasion,并从{{1}获取并连接firstNamelastName对象。

显然,能够从两种特定的对象类型中获取信息并将它们组合成另一种类型,我将不得不拥有一个功能或某种高度耦合的东西,即了解所涉及的所有模块的结构。

考虑到OOP和调制代码管理方法的最佳实践,这些变换器,缝合器,控制器应该如何在项目中实现?

1)我是否为每个可能的交互创建一个模块,该交互使用单个内置方法导出对象? e.g。

Person

为了执行单个任务而实例化单个对象并且我的模块文件夹将非常快速地填充,这似乎很愚蠢。

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;
    };
};

我的模块文件夹再次非常快,而且在OOP中不应该包含在一个对象中吗?

3)我是否创建了一个包含所有可能交互的模块? e.g。

//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;
};

这会让我的模块文件夹更清晰,但它可能会变得很长,我觉得它正在创建一个God对象。

处理分离模块时,最佳/常用做法是什么?有人可以解释这种方法并提供实例吗?

0 个答案:

没有答案