设计的核心任务之一:层次的控制

对于软件而言,层次是让人又爱又恨的东西。


很多问题是通过增加层次解决的,但另外一部分问题也是因为层次而导入的。我们来分别看几个例子。

1:很多时候我们并不希望最终的应用绑定于某个指定平台,比如:Windows。为了达成这种跨平台的目的,就需要在OS和应用之间加入一个中间层,这个中间层负责屏蔽不同OS的差异。实际上,Java虚拟机等走的都是这样一条路线。

2:当使用XML文件保存配置信息的时候,我们并不希望XML的结构在整个程序中随处可见。比如说:现在我们在Configuration/OutputFolder节点下保存了缺省保存目录,但将来很可能节点变成了Configuration/OutputFolder/Save。为了斩开与XML结构的关联,那么我们需要加入一个新的抽象层,来表征XML文件,再通过GetSaveFolder()这样的方法对缺省保存目录进行获取。

通过加入层次解决问题的同时,新的问题也随之发生。在眼前蒙上一层薄纱可以防止眼睛被风沙所伤害,但如果蒙上十层,那更严重的后果将会出现---你看不到路了。

从可理解的角度看,只有某一功能所涉及的所有层次,所关联变量的各种可能性都被澄清之后,具体的代码才可能真的被理解。在排错的时候尤其如此。我们来看一个例子:

在用C++创建集合类的时候,我们可能希望对集合类的内存使用方法进行更多的定制。

有时候我们可能想预先保留一块内存,接下来在这块内存上进行二次分配来存放各种小的对象。

有时候我们也可能想直接在磁盘上分配空间存放放入集合类的对象。

为了达成上面这些目的,层次又一次站出来发挥作用,我们可以建立allocator这样的类来建立一层抽象,创建集合类的时候,可以通过指定不同的allocator来控制内存使用的方法。

这应该是不错的设计方法,C++标准模板库里就是这么做的。

接下来我们来看一旦出了错的情形。

我们可能希望放入集合类的对象总是进行浅拷贝(swallow copy),为此重载了类的拷贝构造函数和赋值函数,但最终发现当对象被放入集合类的时候,不知道为什么总是不成功。

这个时候,逻辑上程序没有任何问题,因此只靠脑子想是完全解决不了问题了。为了排错,我们只能启动调试器。

调试的过程中,我们通常并不能一下就确认问题和allocator究竟有没有关联,所以为了找出问题所在,我们也要对allocator这一层次做点分析。这种分析的开销事实上就成为添加allocator这一层次的代价。

通过上述的例子我们可以大致体会到层次这把双刃剑的威力。

通过层次我们可以让软件更灵活,抽象更充分;但层次也会把达成某一功能所必须的信息进行分割,增加复杂度。所以层次的多少往往并非是一个对与错的问题,而是一个程度问题,究竟什么样的层次才合适,是需要现场的人进行判断的。

曾经有人说过这样一句话,可供我们参考,他说:如果你知道自己在做什么三层足够;如果你不知道自己在做什么,那么十七层也没用。

我个人是认同这一观点的,除非特别的情形,要努力控制层次在三层左右,否则宁愿牺牲一点抽象。

和层次相关的问题主要有两个:一个是层次的多少;另一个则是层次的一致性。如果说层次的多少是一个合适与否的问题,那么层次一致性则是一个是非问题。

某一个层次上所体现出来的东西应该具有层次一致性。

这和前面在讨论的需求中的层次问题类似。

比如说:如果有一个类叫Cat,那这个类的接口,可以有返回猫的颜色,猫的种类,这些属性是在一个抽象层面上的。但如果突然有一个接口是返回猫的个数,那么大多时候就会让人感到奇怪。

我们感觉到奇怪的本质原因是抽象的层次出现了不一致性。颜色和种类这种属性属于具体的某一只猫,而个数则属于猫的集合。

这种抽象层次的不一致实际上是增加耦合度的一个主要元凶。

很不幸的是,这又是一个要依赖于个人技能的地方。眼下还看不到自动判断抽象层次是否合适的方法。

------------------------------------------------------------------------------------------------------------------------------------

理想流 + 软件 = 《完美软件开发:方法与逻辑》
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和逻辑推演本质,追求真理。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 射频分层设计是指将射频电路按照不同的功能和特性进行分层,以达到优化电路性能、简化设计流程等目的的一种设计方法。常用的射频分层设计方法包括: 1. 功率分层设计:将功率放大电路和低噪声放大电路分开设计,以达到降低功率放大电路的噪声系数和提高系统的动态范围等目的。 2. 频率分层设计:将射频电路按照不同的频段进行分层设计,以达到降低电路的互调失真和杂散等目的。 3. 器件分层设计:将不同类型的器件分别应用于不同的电路层次,以达到最佳的性能和可靠性。 4. 布局分层设计:将电路按照不同的功能和特性进行布局,以达到减少电路噪声和互调等问题的影响,同时提高系统的可靠性和稳定性。 5. 信号分层设计:将信号按照不同的类型和频段进行分层,以达到最佳的信号传输和处理效果。 6. 地域分层设计:将电路地域按照不同的功能和特性进行分层,以达到减少电路干扰和提高系统的抗干扰能力等目的。 ### 回答2: 射频分层设计是无线通信系统的基本设计原则之一,它旨在通过合理地划分无线电频谱的不同层次,提高系统的性能和效率。射频分层设计有以下几种方法: 1. 频段划分:根据不同的无线通信应用需求和频谱规划,将频谱划分为不同的频段。常见的频段划分有低频段、频段和高频段等,每个频段可以用于不同的通信技术和服务。 2. 功率控制:通过调整发送端的发射功率,控制不同设备或用户在特定的射频层次的信号强度。功率控制可以避免不同设备或用户之间的干扰,提高系统的容量和覆盖范围。 3. 调制方式选择:根据不同的应用需求和信道条件,选择合适的调制方式来传输数据。常见的调制方式有调频、调相和调幅等,不同调制方式具有不同的性能特点和适用范围。 4. 多天线技术:利用多天线技术,如多输入多输出(MIMO)和波束赋形(beamforming)等,将无线信号在空间维度上进行分层设计。通过利用多个天线的空间多样性和信号处理算法,可以提高系统的容量、覆盖范围和抗干扰性能。 这些方法可以根据具体的无线通信系统和应用需求进行灵活组合和应用。射频分层设计核心目标是提高无线系统的性能和效率,确保各个层次之间的无线信号能够有效地传输和协调工作。 ### 回答3: 射频分层设计是一种在无线通信系统应用的一种技术,旨在提高系统的性能和覆盖范围。以下是射频分层设计的几种常见方法: 1. 频率分层:通过将无线信号分配到不同的频段,以避免频段之间的干扰。这样可以提高系统的容量和稳定性。 2. 功率分层:对于不同的用户或设备,根据其信号质量和需求,可以分配不同的发射功率。这样可以确保系统在使用资源时的有效利用,提高整体性能。 3. 空间分层:通过将无线信号根据目标位置分配到不同的天线,以提高系统的覆盖范围和多路径效应。这在城市环境尤为重要,可以减少阴影效应和干扰。 4. 时域分层:根据不同的时间段或时间窗口,为不同的用户或应用程序设置不同的传输优先级。这可以确保关键任务或高优先级用户的传输能够得到保证,提高整体性能。 5. 编码分层:通过使用不同的编码方案,如调制方式、纠错编码等,为不同的用户或应用程序提供不同的数据传输速率和可靠性。这样可以满足不同的传输需求。 通过结合这些射频分层设计方法,无线通信系统可以更好地适应不同的环境和应用需求,提高系统性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值