私は基本的に同じことをするこれらの3つの機能を持っています。彼らは約束から来るデータを受け取り、各機能について同じ性質を持つオブジェクトを作る。オブジェクトのプロパティを関数の引数として渡しますか?
私はこれを乾燥したいと思います:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, {
type: "File",
title: x.filename,
created: x.Created,
path: x.path
})
})
}
var getEvents = function() {
return wg.getEvents().then(function(data) {
processData(data, {
type: "Event",
title: x.Title,
created: x.Created,
path: x.path
})
})
}
var getFeedback = function() {
return wg.getFeedback().then(function(data) {
processData(data, {
type: "Review",
title: "by " + x.Author,
created: x.Created,
path: x.path
})
})
}
var processData = function(data, props) {
var x = _(data)
.map(function(x) {return props})
.value()
.map(function(x) {
activties.push(x)
})
}
私はこのような何かにprocessData
機能を変更することで、これを乾かすしたいと思います:
var processData = function(data, props) {
var x = _(data)
.map(function(x) {
return {
type: x[props[0]],
title: x[props[1]],
created: x[props[3]],
path: "/" + x[props[4]]
}
})
.value()
.map(function(x) {
activties.push(x)
})
}
それから私はこのようにそれを呼び出すことができます:
var getFiles = function() {
return wg.getFiles().then(function(data) {
processData(data, ['filename', 'created', ['FileRef']['lookupValue']])
})
}
これは私が心に留めていることですが、誰でも賭けているものがあれば私は開いている。
あなたの現在のアプローチには何か問題があると思いますか?確かに、 'processData()'メソッドは少し見苦しく見えますが、他のすべてのものを読みやすくするためにはうまくいきます。 – Archer
processData fnのパラメータの順序を逆転させることができます。関数(データ、小道具)から関数(小道具、データ)まで、そして必要ならば部分的なアプリケーションの恩恵を受ける。 – Delapouite
@Archer私は何か間違っているとは言いませんが、達成するためには可能かシンプルであればコードをDRYにしておくのが好きです。これをDRYしようとすると余分に20行のコードが生成されますが、それは努力する価値がありません。しかし、それが簡単であれば、どうやって学びたいのですか? – Batman