首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何成功地解耦这些类

如何成功地解耦这些类
EN

Stack Overflow用户
提问于 2017-01-19 02:02:20
回答 1查看 134关注 0票数 1

我不确定这个线程的最佳名称,但我正在尝试重构一些代码并删除一些解耦。我被迫在没有boost的情况下使用Visual Studio2005 C++,不要问...(所以不是c++11,也不是更新版本)

我有一个接收消息的协议,该协议包含一个解析器和处理器。解析器从消息中提取信息,并填充结构。然后将该结构传递给处理器,以便对其采取进一步的操作。

代码语言:javascript
运行
AI代码解释
复制
class Protocol
{
    Parser parser;
    Processor processor;

public:
    Protocol() : parser(processor)
    {

    }

    handleMessage(Message& message)
    {
        ParsedData parsedData;
        parser.parse(message, parsedData);
    }
}

class Parser
{
    Processor processor;

public:
    Parser()
    {

    }

    Parser(Processor& p) : processor(p)
    {
    }

    parse(Message& message, ParsedData& parsedData)
    {
        if(message.type == "whatever")
        {
            parseLevel2(message.message, parsedData);
        }
        //else if Other message types
    }

    parseLevel2(MessageLevel2& message, ParsedData& parsedData)
    {
        //Keep going down the rabbit hole, but for simplicity it ends here
        parsedData.blah = "some data";
        processor.ProcessBlahMessage(parsedData);
    }
}

class Processor
{
public:
    Processor()
    {
    }

    ProcessBlahMessage(ParsedData& parsedData)
    {
        //Do logic
    }
}

我希望从解析器中剥离处理器,这样它就更像这样了……

代码语言:javascript
运行
AI代码解释
复制
class Protocol
{
    Parser parser;
    Processor processor;

public:
    Protocol() : parser(processor)
    {

    }

    handleMessage(Message& message)
    {
        ParsedData parsedData;
        parser.parse(message, parsedData); //This will not call the processor from within it
        processor.process(parsedData);  //This is the new 

    }
}

唯一阻止我这样做的问题是,我必须在process方法中有一堆if语句。

代码语言:javascript
运行
AI代码解释
复制
process(ParsedData& parsedData)
{
    if(parsedData.type == "blah")
    {
        ProcessBlahMessage()
    }
    else if(parsedData.type == "grah")
    {
        ProcessGrahMessage()
    }
    //etc...
}

我的问题是,我如何避免所有那些本质上只是再次解析它的if语句?如果我给parsedData一个函数指针,或者lambda,那么我仍然需要在解析器中引用处理器。

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 08:05:33

你可以尝试这样做: 1)在你解析的数据中而不是.blah和.grah中存储vector<void*> 2)假设创建新的blah对象(或任何消息类型),并将指向它的指针放入向量(使用类型作为索引)。3)在处理器中存储处理程序的向量。与解析的数据一起传递给处理器类型,这样你就可以在你的处理程序中为正确的指针调用正确的处理程序4)将void*转换为blah* (或者任何真实的类型)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41732548

复制
相关文章
修改文件的所有者和所在组
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/90637699
zy010101
2019/07/02
2.4K0
修改文件的所有者和所在组
2.15 更改所有者和所属组chown
chown命令 chown介绍和例子 chown等于change owner 更改文件的所有者和所属组 [root@hf-01 ~]# ls /tmp aminglinux amning mysql.sock yum.log [root@hf-01 ~]# ls -l /tmp/yum.log 会看到yum.log的所有者是root -rw-r--r--. 1 root root 0 10月 26 07:48 /tmp/yum.log [root@hf-01 ~]#
运维小白
2018/02/06
2.1K0
LDAP 中 DN CN DC OU
DN 的英文名称是(distinguished name),直接翻译过来就是专有名称。
HoneyMoose
2020/09/29
2K0
LDAP 中 DN CN DC OU
目录权限已经更改所有者及所有组
文件或者目录权限chmod: chmod -(权限数字)-(目录或者文件)=修改权限 给2.txt 增加权限700  chmod -R 批量更新目录和目录下面的子文件的权限 给aming2以及下面的文
叶瑾
2018/06/14
2.4K0
Linux中文件权限,所有者,所属组修改
对于管理文件三个重要且常见的命令 (都需提供 root 权限)。 chmod: 修改文件的权限,SUID、SGID、SBIT 等的特性 chown: 修改文件的拥有者 chgrp: 修改文件所属用户组 一、[chmod]修改文件权限 1. 符号设定法 chmod [who] [+-=] [mode] 文件名 【who】即操作对象 u--- 用户(user) g--- 同组用户(group) o--- 其他用户(other) a--- 所有(all in)[默认] 【+-=】操作符 + 为其添加权限 - 为
入门笔记
2022/06/03
5.3K0
Linux中文件权限,所有者,所属组修改
通过ACLs实现权限提升
在内网渗透测试中我们经常会在几个小时内获得域管理权限,而造成这种情况的原因是系统加固不足和使用不安全的Active Directory默认值,在这种情况下公开的利用工具有助于发现和利用这些问题,并经常导致获得域管理权限,本篇博文描述了一个场景,在这个场景中我们的标准攻击方法不起作用,我们必须更深入地挖掘才能获得域中的高权限,我们描述了使用访问控制列表的更高级的权限提升攻击,并介绍了一个名为Invoke-Aclpwn的新工具和一个对ntlmrelayx的扩展,它可以自动执行这种高级攻击的步骤
Al1ex
2022/09/07
2.4K0
通过ACLs实现权限提升
Exchange 2013 OU大于500新建用户无法查询OU
近期一个项目中,在子域中部署了Exchange 2013 SP1,由于这边环境OU数量有4000+,导致新建用户时无法查询到组织单元,如下图:
李珣
2019/03/14
1.2K0
[802]linux修改文件或目录的所有者(chown)和用户组(chgrp)
文件或目录的用户组更改,注意:要更改的用户组,必须存在于“/etc/group”下
周小董
2020/05/13
24.1K0
Linux 批量修改目录权限,用户组和所有者;kill指定端口
shaun
2023/10/26
3230
Linux_17查看和修改文件权限,修改文件的所有者和所属组
视频在这里 p12-p17 p16 查看修改文件权限 16.1查看 ls -l既可以看到文件的权限 16.2修改文件权限 文字设定 chmode [who] +-= who 文件所有者u 文件所属组g 其他人o 所有都做修改a +-= +增加权限 -减少权限 =覆盖原来权限 mode: r :read读 w:write写 x:exute执行 $ ls -l total 4 -rw-rw-r-- 1 yinli yinli 0 5月 19 21:59 file1 -r
Y大宽
2019/05/23
5.7K0
使用 AD 诱饵检测 LDAP 枚举和Bloodhound 的 Sharphound 收集器
如何在 Active Directory 环境中检测 Bloodhound 的 SharpHound 收集器和 LDAP 侦察活动完成的枚举。我们将通过创建一些诱饵帐户(或蜂蜜帐户)并将它们与真实帐户混合来使用欺骗来检测这一点。诱饵帐户是为欺骗目的而创建的帐户,也用于防御以检测恶意行为。MITRE在其工具和技术中涵盖了Bloodhound和域枚举。
Khan安全团队
2021/12/27
2.7K0
内网学习笔记 | 4、域内信息收集
查看网关 IP 地址、DNS 的 IP 地址、域名、本机是否和 DNS 服务器处于同一网段。
TeamsSix
2021/03/05
3.5K0
内网学习笔记 | 4、域内信息收集
Powershell 命令实现每日给指定组添加全部AD成员
前言: 我们都知道AD中有组的概念,这组我们更多是用来进行权限的管理,公司里有一个系统登录需要确认登陆的AD账户是否是添加到指定的组中,只有加入组中的才有登录权限。现在每次在AD系统中新建人员后,需要再手动添加组成员,否则新账号无法登录这个系统。 解决问题思路: 通过Powershell命令获取AD中的全部成员,然后添加成员到这个组中。 用到的命令: get-aduser;add-adgroupmember 完整命令:
BigYoung小站
2020/05/05
1.1K0
获取域内管理员和用户信息
如果我们拿到了一台普通用户权限的windows计算机,想要在内网中横向移动,需要知道域内用户登录的位置,是否是本地管理员,他的组,是否有权访问文件共亨等等。
黑白天安全
2020/07/30
8.2K0
获取域内管理员和用户信息
在没有 Mimikatz 的情况下操作用户密码
通过利用Mimikatz的 lsadump::setntlm和lsadump::changentlm函数,过去已经涵盖了这两个用例。虽然Mimikatz是最好的攻击工具之一,但我会尽量避免使用它,因为它是反病毒和 EDR 工具的高度目标。在这篇文章中,我将专门讨论用例 #2 — 为横向移动或权限提升重置密码。
Khan安全团队
2022/03/21
2.2K0
LDAP 管理用户(组)
LDAP实现提供被称为目录服务的信息服务,可以看做是一张特殊的数据库系统。可以有效的解决众多网络服务的用户账户问题,规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。
菲宇
2019/06/12
4.3K0
Django集成OpenLDAP认证
Django集成LDAP认证有现成的django-auth-ldap模块可以使用,本文也主要以这个模块的使用为主,先安装模块
37丫37
2019/04/25
1.9K0
第二章 OpenLDAP运维管理
phpLDAPadmin 是一款LDAP GUI客户端管理软件,它提供一个简单并且支持多种语言的LDAP管理软件。
Jerly.Yan
2023/07/18
2.5K0
LDAP协议介绍[通俗易懂]
1. 从用途上阐述LDAP,它是一个存储静态相关信息的服务,适合“一次记录多次读取”。常用LDAP服务存储的信息:
全栈程序员站长
2022/11/15
3.2K0
LDAP协议介绍[通俗易懂]
点击加载更多

相似问题

嵌套组所有者- LDAP查询

16

LDAP:查询OU中所有组的所有用户

011

返回指定OU中所有组的LDAP查询

10

导出所有Azure AD组,包括嵌套组及其成员和所有者(PowerShell)

118

从LDAP获取所有组和subGroups以及所有成员

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档