در این مقاله می خواهیم یکسری تمرین درمورد استایل کدنویسی و توسعه در Node.js انجام بدیم.
استایل کدنویسی
قرارداد Callback
ماژول ها باید یک رابط error-first بصورت callback قرار بدهند. یک چیزی مثل این :
module.exports = function (dragonName, callback) {
// do some stuff here
var dragon = createDragon(dragonName);
// note, that the first parameter is the error
// which is null here
// but if an error occurs, then a new Error
// should be passed here
return callback(null, dragon);
}
همیشه خطاهای callback ها رو چک کنید
برای درک بهتر این موضوع که چرا باید اینکار انجام بشه, ابتدا با یک مثال شروع می کنیم که در هر مسیر ممکن شکسته شده (به مشکل خورده) و سپس مشکلش رو حل میکنیم.
// this example is **BROKEN**, we will fix it soon :)
var fs = require('fs');
function readJSON(filePath, callback) {
fs.readFile(filePath, function(err, data) {
callback(JSON.parse(data));
});
}
readJSON('./package.json', function (err, pkg) { ... }
مشکل اول تابع readJSON هست که هیچ وقت چک نشده که ممکنه خطایی درطول اجرا پیش بیاد. شما باید همیشه این خطاها رو چک کنید.
نسخه ی اصلاح شده :
// this example is **STILL BROKEN**, we are fixing it!
function readJSON(filePath, callback) {
fs.readFile(filePath, function(err, data) {
// here we check, if an error happened
if (err) {
// yep, pass the error to the callback
// remember: error-first callbacks
callback(err);
}
// no error, pass a null and the JSON
callback(null, JSON.parse(data));
});
}
Return در callback ها
یکی از مشکلاتی که همچنان در کد بالا وجود داره اینه که اگر خطایی رخ بده برنامه در شرایط if متوقف نمیشه و ادامه پیدا می کنه. این میتونه باعث اتفاقات ناخواسته بشه. بهتره همیشه callback ها رو return کنید :
// this example is **STILL BROKEN**, we are fixing it!
function readJSON(filePath, callback) {
fs.readFile(filePath, function(err, data) {
if (err) {
return callback(err);
}
return callback(null, JSON.parse(data));
});
}
استفاده از try-catch فقط در کد sync
یکی از چیزهایی که باید مراقب باشیم JSON.parse هست. اگر JSON.parse قادر به تبدیل رشته ورودی به یک فرمت معتبر JSON نباشه میتونه منجر به خطا بشه.
یک JSON.parse بصورت همگام اجرا میشه پس ما میتونیم از طریق بلاک try-catch کنترلش کنیم. توجه کنید که این ترفند برای callback ها کار نمیکنه.
// this example **WORKS**! :)
function readJSON(filePath, callback) {
fs.readFile(filePath, function(err, data) {
var parsedJson;
// Handle error
if (err) {
return callback(err);
}
// Parse JSON
try {
parsedJson = JSON.parse(data);
} catch (exception) {
return callback(exception);
}
// Everything is ok
return callback(null, parsedJson);
});
}
از استفاده ی this و new خودداری کنید
الزام آور بودن یک موضوع خاص در node یک پیروزی نیست, چون node تعداد زیادی callback پاس میده و بطور سنگین از توابع سطح بالا استفاده میکنه تا روند رو مدیریت کنه. استفاده از استایل توابع شما رو تا حد زیادی مصون نگه میداره.
ماژول های کوچک بسازید
مثل یونیکس عمل کنید :
"توسعه دهندگان باید یک برنامه شامل قطعات ساده ای که بخوبی بهم وصل شدند, بسازند, پس مشکلات محلی هستند و قطعات برنامه میتونه در آینده جایگزین بشه تا ویزگی های جدیدی بوجود بیاد."
کار رو زیاد گره ندید - ساده بگیرید, یک ماژول باید یک کار انجام بده, ولی به بهترین نحو!
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید