使用对象而不是几个变量有什么好处吗?

时间:2018-03-14 14:15:37

标签: node.js object

我正在nodeJS中编写一个应用程序 - 一个Facebook Messenger应用程序。

我的应用程序包含一个名为strings.js的模块,它主要用于存储公共字符串。任何时候我需要打印问候语或我从strings.js文件中提取的任何内容。 Strings.js看起来像这样:

/*
* This module exports common strings.
* */
'use strict';
module.exports = {
    // Quick replies for user to choose age range
    ageReplies:[
    {
        //Option 1 CODE
    },
    {
        //Option 2 CODE
    },
    {
        //Option 3 CODE
    }],

    // Quick replies for user to choose gender
    genderReplies:[
    {
        //Option 1 CODE
    },
    {
        //Option 2 CODE
    },
    {
        //Option 3 CODE
    }],

    // 'greetingButtons' is used to create the buttons sent to a registered 
    // user during the greeting
    greetingButtons: [
    {
        //BUTTON 1 CODE
    },
    {
        //BUTTON 2 CODE
    }, 
    {
        //BUTTON 3 CODE
    }],

    userAgeString: "How old are you?",
    userGenderString: "What's your gender?",
    userInitialGreetingString: "Hello there!  I don't believe we've spoken before.  You'll need to create a user profile, so let's do that now.",
    userNamePromptString: "What would you like me to call you?",
    userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
    userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
};

前两个"对象" (如果那是我们可以称之为的话)," ageReplies"和" GenderReplies"用于在询问用户性别和年龄时(在用户个人资料创建期间)在Facebook Messenger中生成快速回复。

接下来是" greetingButtons",用于创建按钮,这些按钮通过&#34发送给以前注册的用户?"接下来你想做什么?"消息。

最后,我有许多字符串用于问候用户,提示他们输入性别和年龄,等等。当我添加它们时会有更多这些。

我一直在考虑将这些单独的字符串放在一个对象中,例如:

stringData: {
    userAgeString: "How old are you?",
    userGenderString: "What's your gender?",
    userInitialGreetingString: "Hello there!  I don't believe we've spoken before.  You'll need to create a user profile, so let's do that now.",
    userNamePromptString: "What would you like me to call you?",
    userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
    userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
},

这样做有什么好处吗?有什么意义吗?

另一个问题是,如果我DID使用这样的对象,是否可以将我的按钮和快速回复放入同一个对象中,例如如下所示:

stringData: {
    ageReplies:[ /* Age reply code */ ],
    genderReplies: [ /* Gender reply code */ ],
    greetingButtons: [ /* Button code */ ],
    userAgeString: "How old are you?",
    userGenderString: "What's your gender?",
    userInitialGreetingString: "Hello there!  I don't believe we've spoken before.  You'll need to create a user profile, so let's do that now.",
    userNamePromptString: "What would you like me to call you?",
    userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
    userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
},

这会有用吗?

编辑:只是为了澄清,我不是在谈论在我的主代码中有一个对象。我所谈论的对象将在strings.js

1 个答案:

答案 0 :(得分:1)

通常在编写涉及显示某种文本的程序时,我会将我的所有副本(最终发送给用户的文本)存储在自己的文件中。这些文本块有一个像你所做的变量名,这使我可以在系统周围引用它们。

为什么我这样做?国际化(通常缩写为i18n)。

通常的做法是将显示的文本从应用程序的其余部分中分离出来,以便您可以轻松地为文本创建多个文件,并根据用户语言设置(或区域设置)从正确的文件加载。

在这种情况下,每个口语都有一个字符串文件,其中变量名称都是相同的。然后根据设置/区域设置从特定文件中进行选择。

仅凭这个原因,我将我的所有文本与应用程序的其余部分分开。当它是基于HTML的项目等时,这不起作用,但是像nodejs服务器端错误这样的东西消息,它完美地运作。

就个人而言,当我制作机器人时,选项(按钮)的数量与我使用的文本无关。因此,我创建不同选项的代码会在其他地方发生,但会使用我的i18n模块提供的字符串。这样文本和按钮很好地分离。按钮创建通常发生在一个函数中,该函数采用某种对象数组来表示每个按钮的选项,然后我会在创建最终按钮标记时从我的i18n文件中提取文本。

旁注:我也没有标注像“字符串”前缀或后缀这样的内容,指的是i18n.welcomeGreetingwelcomeGreeting这样的东西,我发现这不仅仅是明确的东西。

<强>铊组成; dr

现在它不会产生太大的影响,但如果您的应用程序可能在将来增长,那么将文本与按钮创建分离可以带来有用的好处。它通常也可以更容易使用,并将按钮与文本分开。毕竟,你并不总是在聊天机器人中使用这两者,所以它们可能应该是单独的问题。