公共特征集的设计-分割数据和代码

  • 本文关键字:分割 数据 代码 特征 perl
  • 更新时间 :
  • 英文 :


我是Perl编程的新手,我想了解以Perl模块的形式构建一段代码的最佳方法。它应该提供一个框架,使"数据"可以在不影响代码的情况下增长/收缩。

从本质上讲,程序需要执行3件不同的事情("数据"部分):

  1. 根据主机上安装的RPM(RPM名称分别为"A"、"B"one_answers"C"),从多个文件(整个文本)中收集文本。文件列表将会增长,并且应该存储在一个简单的外部化文件中,该文件应该易于编辑
  2. 在操作系统(Linux)上运行操作系统命令,并将命令的输出捕获到一个文本文件中,具体取决于主机上安装的RPM(RPM名称="a"、"B"、"C",仅用于参数)
  3. 在特定数据库上运行Database命令(让我们称之为"DBA"、"DBB"、"DBC",3个数据库对应于3台主机),并将输出捕获到文本文件中,具体取决于主机上安装的RPM(出于参数考虑,RPM名称分别为"a"、"B"one_answers"C")

我需要以这样的方式对逻辑进行编程:

  1. 必须有一个"RPM到文件/命令/DB命令"的映射,它可以很容易地与主Perl程序分开编辑
  2. 文件的数量、它们的名称/位置+OS+DB命令预计会发生变化,因此应该可以很容易地与主Perl程序分开编辑
  3. RPM名称和到上面数据的映射可以更改,因此应该可以很容易地与主Perl程序分开编辑

到目前为止我研究过的想法:

  1. 哈希的哈希(在Perl模块中)
  2. 数组数组(在Perl模块中)
  3. 外部XML
  4. 外部键值对文件

有什么关于做这件事最简单和最简单的方法的指导吗?说明性代码将是非常有益的。

如何存储配置取决于它的复杂程度,以及没有对系统进行编程的人对它的访问程度。

将配置存储为Perl代码的好处是,解析非常便宜。然而,可能存在安全问题,因为配置文件不会被加载,而是被执行。此外,这是一个可怕的设计。

XML非常灵活,但(a)手动编辑很可怕,(b)处理成本比其他解决方案更高。

如果您的配置数据可以很容易地表示为键值对,那么就这样做吧。否则,看看JSON或YAML,它将为您提供所需的所有功能(大多数情况下)。


我会以这样一种方式编写系统,即在程序开始时加载一个主对象。构造函数将RPM类型作为参数,并处理相应的配置文件。

然后,您将创建一个到此对象的接口,以便处理文本文件、运行系统命令和运行DB查询将使用正确的配置值。

只要确保你的代码美观且通用,这样程序的主要逻辑就不需要知道它使用的是什么RPM,除非在初始化时。

Perl类通常同时也是一个模块。在合理的情况下,根据需要创建辅助模块。


  • Perl面向对象编程教程
  • YAML文件
  • JSON文档

示例构造函数:

package MyObject;
use strict; use warnings; use Carp;
use YAML qw(LoadFile);
my $config_file_dir = "/foo/bar/";
sub new {
my ($class, $type) = @_;
do_rpm_type_sanity_check($type) or confess qq(Invalid type given: $!);
my $self = LoadFile($config_file_dir . $type . ".yaml");
do_config_sanity_check($self) or confess qq(Really weird configuration: $!);
bless $self, $class;
}

示例用法

#!/usr/bin/perl
use strict; use warnings;
use MyObject;
my $type = magically_get_type();
my $obj = MyObject->new($type);
...; # do something useful with the object.

最新更新