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中提供该目录的路径。下面的答案强调了相同的细节。