Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 有没有可能使整个程序没有任何硬编码部分?_Design Patterns_Argv - Fatal编程技术网

Design patterns 有没有可能使整个程序没有任何硬编码部分?

Design patterns 有没有可能使整个程序没有任何硬编码部分?,design-patterns,argv,Design Patterns,Argv,通常,当我们想要制作一个无需重新编译即可修改的程序时,我们从文件中读取数据和配置 但这意味着在代码的某个地方,我们必须硬编码数据或配置文件的文件位置 例如: public class Program { public static void Main() { AppData appData = ReadAppData("app.data"); AppConfig appConfig = ReadAppConfig("config.txt");

通常,当我们想要制作一个无需重新编译即可修改的程序时,我们从文件中读取数据和配置

但这意味着在代码的某个地方,我们必须硬编码数据或配置文件的文件位置

例如:

public class Program
{
    public static void Main()
    {
        AppData appData = ReadAppData("app.data");
        AppConfig appConfig = ReadAppConfig("config.txt");
        Program = new Program(appData, appConfig).Run();
    }
}
在本例中,两个字符串——“app.data”和“config.txt”是硬编码的,因为不指定文件位置就无法读取文件

当然,我们可以将其简化为一个文件-例如,我们可以只读“app.data”并从该文件中获取配置文件位置,但我们仍然无法删除程序中所有硬编码的部分

从理论上讲,用零个硬编码部分制作整个(有用的)程序是可能的吗


是否可以仅使用软编码使整个(有用的)程序成为可能?

使用命令行参数传递文件名。您对main的定义不完整

在C语言中,这就是
main
的样子:
staticvoidmain(string[]args)

调用该程序时,可以使用
myprogram app.data config.txt
。您的程序可以从
args
数组中获取这两个参数。大多数编程语言都有这种特性

您还可以从main向操作系统返回值。在C#中,您的主声明将是
static int main(string[]args)


void Main()
只是“我们不需要输入”的简写

使用命令行参数传入文件名。您对main的定义不完整

在C语言中,这就是
main
的样子:
staticvoidmain(string[]args)

调用该程序时,可以使用
myprogram app.data config.txt
。您的程序可以从
args
数组中获取这两个参数。大多数编程语言都有这种特性

您还可以从main向操作系统返回值。在C#中,您的主声明将是
static int main(string[]args)


void Main()
只是“我们不需要输入”的简写

main
可以写入
publicstaticvoidmain(String[]args)
其中
args
系统中可用的空白分隔令牌数组。也就是说你可以写:

java softie.java app.data config.txt
转到命令行,然后在main中读取
args[0]
args[1]
,使您能够转到:

java softie.java otherapp.data otherconfig.txt

System.in
以命令行输入而闻名,但它只是一个
FileInputStream
,可以在许多java调用上下文中使用。

main
可以编写
公共静态void main(String[/args)
其中
args
系统中可用的空白分隔令牌数组。也就是说你可以写:

java softie.java app.data config.txt
转到命令行,然后在main中读取
args[0]
args[1]
,使您能够转到:

java softie.java otherapp.data otherconfig.txt

System.in
以命令行输入而闻名,但它只是一个
FileInputStream
,可以在许多java调用上下文中使用。

请不要给我这样的答案。。。这实际上取决于你如何提问。请花些时间阅读帮助页面,特别是命名和的部分。更重要的是,请阅读。您可能还想了解。您只想省略配置和环境依赖性的事情,或者您也关心具体实现的硬编码,只是让您的代码依赖于抽象,其中每个类公开或使用一些抽象。需要有一部分代码来进行连接,这部分代码可能是框架的一部分,但它必须存在。现在,对于配置环境,您可以将配置文件放在一个目录中,您可以在cmd行args中提供该目录的路径。下面的答案在细节上也是一样的。请不要给我像。。。这实际上取决于你如何提问。请花些时间阅读帮助页面,特别是命名和的部分。更重要的是,请阅读。您可能还想了解。您只想省略配置和环境依赖性的事情,或者您也关心具体实现的硬编码,只是让您的代码依赖于抽象,其中每个类公开或使用一些抽象。需要有一部分代码来进行连接,这部分代码可能是框架的一部分,但它必须存在。现在,对于配置环境,您可以将配置文件放在一个目录中,您可以在cmd行args中提供该目录的路径。下面的答案强调了相同的细节。