关于解耦的理解

在程序设计过程中,最头痛的不是逻辑的编写过程,更不是算法的设计,最头痛的是如何设计出一个容易维护,扩展性好的东西。而耦合问题是最令人烦躁的,它的存在很多人发现不了,所以往往无从入手,真是有苦自己知了,呵呵。以下是我的经验之谈。我通过例子来体现耦合问题的影响。第一个例子: 在开发游戏的时候,有很多实体类,通常属于一条相同的生产线,如地形:土地,石块,草地,雪地,沼泽,等,具有相同特征而功能不同的对象,新手们,一般是在程序的某个地方,默默地new出这些应用到的对象,恩,一个,两个,三个,慢慢你会发现程序中不断出现新对象,如果存在10对象实体,而对象的提供了5个接口函数,也就是,读写操作,在程序中出现了几十次,这时,我不要这个对象了,换成其他了,那你是不是要改几十处地方?恩,问题就是这里了,没有一个抽象层面,必然会导致维护困难,当对象扩大化到100个,这是一个维护噩梦,当然,单单一个抽象层面是无法解决new实体对象的事实的,这个是令人头痛的问题,管理对象的生产是一个很重要的模块,这里对于某些高级语言,如C++,唯一比较好缓解的是工厂模式中的工厂方法,我比较喜欢用这个模式去管理对象,简单工厂就不要学了,没什么实际意义,而我可以很明确告诉你,第一个带你入门,第一个让你打开眼界的模式绝对是工厂方法模式,如果真想学学模式,请先研究工厂方法,其使用的意义在于把对象的生成延迟到子类,而统一使用接口去管理对象的初始化,把变化点分离出调用端,这里我只能告诉你为什么要用设计模式,什么情况下要用,理不理解就靠你自己的实际经验和悟性了,本人悟性不高,当时在学习设计模式的时候,看了很多次依然没有领悟到工厂模式的奥妙,直至代码量和项目经验不断地增加才顿悟出过中道理,确实是很难用文字来表达,不过以上的例子足够证明它的意义,根源都是为了解耦。第二个例子: 由于我一直都在开发游戏,所以所举得例子不免都和游戏有关,这个例子,如果你写过一个完整的游戏,必然有所了解,游戏总会有界面,而其中比较典型的界面是,菜单界面,菜单里有按钮,对吧?恩,这个问题,我当时设计就考虑,菜单类和按钮类究竟是分开还是合在一起?想来想去,由于当时设计观念没到家,最后把它们合在一起了,这种做法绝对是不好的,为什么呢?我们不要从概念上入手解释,通俗的讲法就是,菜单和按钮的对应关系是一对多,对吧?没有一种固定的关系,有可能1对2,1对3,1对10等等,所以把它们写在一起,是很僵化的,就单凭这种证明就可以发现,它们要分开,而它们最后的表现是合在一起,通过组合的方式,把按钮的抽象层面注入到菜单里面,就可以动态地生成完整的菜单,所谓的组合方式,不就是,菜单里面有一个存放按钮引用的集合,希望你明白我所说的,具体我就不解释了。 结语:我认为这里是全篇文章最重要的,比任何所谓的分层理论都重要,因为它更通俗,更实际,很多人,并不是面向对象学得不好,但总觉得差什么,我也经历过,面向对象,封装,多态,继承,学过的人都知道,都认为自己了解了,其实不然,很多很奇妙的因素,让你误解了,大部分的人认为封装很简单,其实大错特错了,封装是最奇妙的,也是最难用好的。只要你记住以下原则,必然能很好地用好封装,成员尽量使用protected和private,不要去使用public.尽量不要提供给外部对成员属性getter的接口,意思就是不要暴露成员,为什么要这样呢?很简单,暴露成员属性必然会导致自身业务的外泄,业务外泄,会导致,类之间的无谓耦合,如A类有成员a,而程序需要对a数据改变,而你提供一个B类可以访问a成员的getter接口,B类在其自身对a修改,看上去没什么,实际上,就是类耦合,对a的修改是类A的职务,由于习惯的提供getter,导致了,在写类B的时候错误地添加了修改业务,使类A内聚能力降低,程序逐步庞大必然会越发明显,真所谓牵一发动全身,小程序确实是很难看出问题所在。就写那么多,本人愚见,希望对你有帮助。
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RabbitMQ 是一个开源的消息队列系统,它可以在应用程序间传递消息,实现应用目标。下面是我对 RabbitMQ 应用理解: 1. 消息传递:RabbitMQ 提供了一种可靠的机制来传递消息,应用程序可以通过发送和接收消息来进行通信。这样,不同的应用程序可以通过消息进行,它们不需要直接依赖于彼此的存在和状态。 2. 异步通信:RabbitMQ 支持异步通信模式,消息的发送和接收是异步的。这使得应用程序可以并发地处理消息,提高系统的吞吐量响应性能。 3. 发布/订阅模式:RabbitMQ 支持发布/订阅模式,一个应用程序可以将消息发布到一个交换机(Exchange)上,而多个应用程序可以通过订阅该交换机来接收消息。这样,消息的发送者和接收者之间,发送者只需要将消息发布到交换机上,而不关心具体的接收者。 4. 路由和过滤:RabbitMQ 提供了灵活的路由和过滤机制,可以根据消息的特性将消息路由到不同的队列中。这样,可以根据需要将消息发送到特定的队列中,实现更精确的。 5. 可靠性:RabbitMQ 提供了消息持久化和确认机制,确保消息不会丢失。应用程序可以设置消息的持久化标志,使得即使在服务器重启或发生故障的情况下,消息也能得到保证。 总的来说,RabbitMQ 提供了一种灵活、可靠的消息传递机制,帮助应用程序实现,提高系统的可伸缩性和可维护性。通过使用 RabbitMQ,应用程序可以更好地进行分布式架构设计,并实现高效的异步通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值