考慮下面的代碼:breezejs:混淆從數據庫中獲取實體VS從緩存中
function getPersonById(personId, type) {
var p1 = new breeze.Predicate("Id", "==", personId);
var p2 = new breeze.Predicate("Type", "==", type);
var query = breeze.EntityQuery.from("Contacts").where(p1.and(p2))
if (!manager.metadataStore.hasMetadataFor(service.serviceName)) {
return manager.fetchMetadata().then(function() {
return manager.executeQuery(query.using(service));
});
} else {
var fromCache = manager.getEntityByKey('Contact', personId);
if (fromCache)
return Q.resolve(fromCache);
return manager.executeQuery(query.using(service));
}
}
我做事情的正確方法是什麼?在我看來,爲了獲取實體,我必須編寫大量的樣板代碼。我必須確保元數據是已知的,然後如果實體已經在緩存中。
我面臨一個問題,因爲如果executeQuery被調用,那麼返回值是一個數組。但是,如果調用getEntityByKey,則返回值是一個實體。我怎樣才能以優雅的方式處理這個問題?有沒有辦法強制executeQuery返回一個單一的實體而不是數組? (無論如何,我只希望只有一個返回值)