C 如何在嵌入式UNIX系统中抽象网络服务API
我正在为路由器使用嵌入式LINUX系统。有一个web GUI供用户配置选项。当用户填写web表单时,该表单将提交给web服务器函数,该函数负责验证用户输入,将配置保存在数据库中,并使用C标准库和bash脚本重新启动某些服务。还有一个命令行接口,可以通过SSH调用。这个CLI会再次验证用户输入,将配置保存到数据库中,并使用bash脚本重新启动某些服务 我想将一些业务逻辑抽象为更紧密的层。例如,我正在考虑为DHCP服务器使用抽象数据类型。ADT接口将公开概念实体上的操作(启动/停止服务,设置要提供给LAN客户端的IP地址池),并隐藏操作实现细节(设置DHCP服务器的脚本) 因此,为DHCP服务器提供这段ADT:C 如何在嵌入式UNIX系统中抽象网络服务API,c,design-patterns,embedded,abstract,C,Design Patterns,Embedded,Abstract,我正在为路由器使用嵌入式LINUX系统。有一个web GUI供用户配置选项。当用户填写web表单时,该表单将提交给web服务器函数,该函数负责验证用户输入,将配置保存在数据库中,并使用C标准库和bash脚本重新启动某些服务。还有一个命令行接口,可以通过SSH调用。这个CLI会再次验证用户输入,将配置保存到数据库中,并使用bash脚本重新启动某些服务 我想将一些业务逻辑抽象为更紧密的层。例如,我正在考虑为DHCP服务器使用抽象数据类型。ADT接口将公开概念实体上的操作(启动/停止服务,设置要提供给
static int enable;
static struct in_addr lan_ip_pool_start;
static struct in_addr lan_ip_pool_end;
static char* opt12_hostname;
.....
int DhcpServerStart ()
{
....
....
}
对于上面的方法,它可以在调用时更新enable变量,更新数据库并实现代码来fork和exec DHCP服务器二进制文件,并将正确的参数传递给它。
但是我认为我可以通过提取更多不相关的职责来获得更多的好处
所以我想用一个新的API来抽象数据库,也许我可以用另一个API来抽象shell脚本。通过这种方式,我可以迁移数据库和脚本,而无需更改域对象的实现:
#include <databaseapi.h>
#include <shellcfg.h>
static int enable;
static struct in_addr lan_ip_pool_start;
static struct in_addr lan_ip_pool_end;
static char* opt12_hostname;
.....
int DHCPServerStart ()
{
database_saveDHCPServerState(1);
shell_DHCPServerStart();
}
#包括
#包括
静态int使能;
静态结构在\u addr lan\u ip\u pool\u start;
地址局域网ip池端的静态结构;
静态字符*opt12_主机名;
.....
int DHCPServerStart()
{
数据库_saveDHCPServerState(1);
shell_DHCPServerStart();
}
我对上述方法一点也不满意。我认为更新数据库并不是DHCP服务器作为概念对象应该考虑的事情。同时,我不确定是应该抽象shell脚本来设置网络服务,还是应该由代表特定业务实体的每个ADT来实现
另一方面,当系统启动时,处理系统初始化的函数将实例化所有业务实体,因此我考虑将所有实体包含在一个全局“类”/ADT中。也许这个“类”可以公开一个接口,让用户界面设置任何服务,然后这个全局对象应该负责更新数据库,并通过使用表示服务的特定ADT启动一些服务