我想知道最好的方法是初始化类的新实例以访问类中的方法。我的班建立了数据连接,然后有了一些获取数据的方法。 在我的控制器中,我有多个使用该类的函数。所以我的问题是每个控制器可以初始化一次该类,还是我需要对每个函数甚至对方法进行一次初始化,因为某些函数可能多次调用多个方法或同一方法。目前,我每个函数都会对类进行一次初始化,但是要确保我正确地进行下一步操作。
为了澄清一点,我的课看起来像这样
const couchbase = require("couchbase")
var config = require('../config/config')
class CouchController {
constructor() {
this.cluster = new couchbase.Cluster(config.cluster);
this.cluster.authenticate(config.userid, config.password)
this.N1qlQuery = couchbase.N1qlQuery;
this.bucket = this.cluster.openBucket('Contacts', function(err) {
if (err) {
console.error('Got error: %j', err);
}
});
this.bucket2 = this.cluster.openBucket('mail_store', function(err) {
if (err) {
console.error('Got error: %j', err);
}
});
}
bucketWithName(name) {
let buckets = { "mail": this.bucket2, "contacts": this.bucket}
return buckets[name] || this.bucket // this.bucket is default
}
n1qlQuery_wId(bucketName,n1qlStr, id){
let bucket = this.bucketWithName(bucketName)
return new Promise((resolve,reject)=>{
let statement = this.N1qlQuery.fromString(n1qlStr)
statement.consistency(this.N1qlQuery.Consistency.REQUEST_PLUS)
bucket.query(statement, id, (err, result, meta)=>{
if(err){
console.log(err)
return reject(err)
}
return resolve([result, meta])
})
})
}
在控制器中,我现在这样称呼它
farmRoutes.get('/list', async(req, res) => {
try {
var couchdb = new couch
var myQuery = await cbQ.farmGrid(req.query, true)
var myCount = await couchdb.n1qlQuery_wId("contacts",myQuery[0],[])
var result = await couchdb.n1qlQuery_wId("contacts",myQuery[1],[] )
res.status(200).json({ Success: true , Error: "", Message: "", "RowsAffected" : result[1].metrics.resultCount, "RowCount" : myCount[0][0].count, Data: result[0]})
} catch (error) {
console.log(error)
res.status(200).json({ Success: false , Error: error.code , Message: error.message})
}
})
答案 0 :(得分:1)
我不确定您了解什么类和实例化。如果您拥有所有此类共享的相同方法,并且不存储数据,则可以仅对它使用静态方法,而无需实例化。如果它正在存储数据,但该数据在各处共享,则可以只使用一个全局实例(所有实例都使用该实例)(“单例模式”)。如果您需要该类的多个版本,每个版本具有不同的数据,那就是您实例化该类的多个实例。
答案 1 :(得分:0)
存在带有方法的对象,以便可以将状态存储在对象中。因此,您应该创建该对象的实例,并在需要它的状态时保留它。
如果您正在讨论的对象没有持久状态,那么通常没有理由保留它,可以在需要时创建一个对象,然后在完成后释放它。
如果对象中没有实际状态,则应该将这些方法设为静态方法,您可以随时调用它们而无需创建新实例。
如果我们能看到并理解您的实际代码,我们将为您提供更多帮助。