SORU
24 NİSAN 2012, Salı


Nodejs. En iyi yol ayrı modüller halinde ortak değişkenleri geçmek için

Ana uygulama ve Kimlik Doğrulama uygulaması için modül olarak ayrı yönlendirici dosyaları kullanıyorum. En iyi yolu yönlendiriciler içine değişkenleri(db istemci) geçmek alamıyorum. Bu koda veya geçiş yapmak istemiyorum:

module.exports = function(app, db) {

Belki de en iyi singleton kayıt kullanın veya küresel db değişken kullanmanın yolu var mı?

Tasarım desenleri ile experiense nedir? Hangi yol en iyisi ve neden?

CEVAP
26 NİSAN 2012, PERŞEMBE


Bağımlılık enjeksiyon kullanarak, şey, iyi bir üslup olarak geçmek bulduk. Aslında var gibi bir şey olurdu:

// App.js
module.exports = function App() {
};

// Database.js
module.exports = function Database(configuration) {
};

// Routes.js
module.exports = function Routes(app, database) {
};

// server.js: composition root
var App = require("./App");
var Database = require("./Database");
var Routes = require("./Routes");
var dbConfig = require("./dbconfig.json");

var app = new App();
var database = new Database(dbConfig);
var routes = new Routes(app, database);

// Use routes.

Bu faydaları bir numarası vardır:

  • require("databaseSingleton") ya da kötü diyorlar, global.database * * * * seni bir yere bağımlılıkları dosyasını ortasında saklamak yerine açık bağımlılıkları ile bileşenlerine sistem ayrı, zorlar.
  • Bunu yapan birim testi çok kolay: istersem test Routes yalıtım, ben enjekte ile sahte app database parametreler ve test Routes kod kendisi.
  • -Grafik nesne kablolama birlikte tek bir yer, kompozisyon kök bu durumda server.js, app giriş noktası olan) yani tüm koyar. Bu, her şeyi birlikte sistemde nasıl uyduğunu görmek için bakmak için tek bir yer verir.

Gördüğüm bunun için iyi örneklerden biri an interview with Mark Seeman mükemmel kitabın yazarıdır . ben^>Bağımlılık Enjeksiyon .NET. O kadar JavaScript için de geçerlidir, ve özellikle Node.js için: require genellikle klasik konumlandırıcı hizmeti, sadece bir modül sistemi yerine kullanılır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011
  • Peyton

    Peyton

    28 Aralık 2008
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010