2017-04-20 58 views
0

我想讓模塊對我正在使用的其他模塊的知識較少。 例如,我管理用戶創建的控制器將採用數據庫模塊並用它來創建用戶。它將首先解析req中的細節,然後將其傳遞給數據庫模塊,調用一個特定的函數。模塊需要對項目有多少知識

在這種情況下,控制器模塊知道我的db模塊具有.register.creatuser函數。如果我想更改數據庫模塊的組織結構,我將不得不修改這部分代碼。你認爲這是足夠的分離還是不足?我應該單獨傳遞函數而不是整個數據庫模塊,例如,讓上面的代碼使用另一個參數createUser函數,並使用它來代替db.register.createUser。

+0

我建議你爲每個服務創建一個模塊,例如註冊模塊,產品模塊,訂單模塊,而不是在db模塊內部。 DB模塊應該是這些服務的依賴關係,而不是持有者。應該有一個層次結構,如:controller - > service - > database |加密,通常低於水平不知道以上的水平。記住一個模塊組的功能。 –

回答

0

我建議你爲每個服務創建一個模塊,例如註冊模塊,產品模塊,訂單模塊,而不是在db模塊內部。那麼實現數據庫模塊應該是這些服務的依賴關係,而不是持有者。

應該有一個像層次結構:控制器 - >服務 - >數據庫模型|加密,通常低於水平不知道以上的水平。記住一個模塊組的功能。

服務將保持每個活動背後的邏輯,並根據服務結果控制重定向邏輯。

喜歡的東西:

控制器/ register.js

var register = require('./service/register'); 

registerController.postUser = function(req, res, next){ 
    email = req.body.email; 
    password = req.body.psw; 
    try { 
     register.createUser(email,pasword); 
    } catch(e) { 
     // Handle email and password validation error 
     // Handle attempting to create a record for existent user 
     // Others 
     res.render('singup?error', { message: 'There was an error!' }); 
    } 

    //successfull implementarion 
    res.render('login', { message: 'User registered successfully! Please login'}); 
} 

服務/ register.js

var crypto = require('...'); 
var User = require('...'); 

module.exports = { 
    createUser: function(email, psw) { 
     // Validating fields 
     if(email == undefined || psw === undefined) 
      throw new Error('Field not valid'); 
     //Validating existance 
     if(User.findByEmail(email) == undefined) { 
      // Encrypting password 
      var pswHash = crypto.createHmac('sha256',secret).update(password).digest('hex'); 
      //Create the user object 
      var user = new User({ 
       email: email, 
       encryptedPassword: pswHash 
      }); 
      // Save object 
      user.save().then(function(user) { 
       console.log('User created successfully'); 
      }); 
     } 
    } 
} 

型號/ user.js的

在這裏,您可以在mongo或關係數據庫上執行數據庫實現。

+0

當存在db.save時,db是否還會保存保存功能和其他功能,使它再次成爲持有者? – Nullha

+0

如果我想交換數據庫實現或函數,那麼我不需要更改實現中每個服務模塊中的代碼? – Nullha

+0

那麼,爲了我的觀點,服務被用來協調與用戶創建相關的活動,如用戶字段驗證,用戶對象創建,密碼加密和數據庫持久性。也許而不是調用數據庫來保存,你只需要導入你的模式對象(從mongo或關係數據庫),然後堅持對象。 –