`
oolala
  • 浏览: 103257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
09c341db-7f05-3f2b-a572-9ee69a5d8a77
unix环境高级编程
浏览量:22702
社区版块
存档分类
最新评论

谈谈“模式思维”

阅读更多
谈谈“模式思维”
原贴网址: http://www.jdon.com/jivejdon/thread/26737.html
     
现在各种框架越来越多;模式使用机会性似乎减少了,那么是不是意味着我们就不必掌握模式了呢?其实,学习模式实际为了培养模式思维,模式思维有助于了解和使用框架。

例如如何我们在使用表现层哪个框架,都是MVC模式实现,那么进行编程步骤时,我们脑海里就浮现一个步骤V/C/M以及C和V的转发关系,进而感觉Struts-config.xml配置就不是多余或复杂,而是必须的。

现在有人觉得好像Java世界框架特别多,异常复杂,其实这可能是他从封闭世界走向开放自由世界产生的错觉,当你具备模式思维时,实际你就具备了挑选各种各样框架的能力,打个比喻:以选择轿车为例子,过去,只有一种“红旗”轿车供选择,你就只有接受这个轿车;但是现在轿车多了,选择多了,你就必须了解轿车的通用概念,进而你就可以在各种轿车之间选择和衡量,了解轿车的通用概念这个过程就如同我们学习模式,具备通用编程的模式思维,有了模式思维,就会发现有这么多选择产品,不再嫌复杂,而是变得兴奋了;所以,没有复杂的东西,只有是否原意学习的头脑;PC电脑对于一些人很复杂,可是对于我们会复杂吗?不会,因为我们已经掌握通用电脑的模型、模式。

所以,有人觉得Java软件很多配置复杂,甚至产生配置恐惧症,那是因为他没有模式思维,在模式思维指导下的编程工作,就象在写一篇生动的小说一样,你脑海展现的生动模式实现步骤,而无论代码或配置都是实现你模式思维的文字工具,模式思维考虑到哪里,就想起什么配置,配置对具备模式思维的你来说是很自然的表达。

在模式思维下的Java编程,编码阶段code completion可能花费2/3时间,但是调试测试时间只需要1/3甚至不到,大多数情况下是一步到位的调试成功;这比以前1/3编程时间,2/3调试时间要高效多,关键是:你无论花费多少时间在调试上,实际上是在做一个修修补补的工作,是在做维修工,头疼医头,永远是机修工,无法成为设计师。

下面从模式思维角度谈谈几个认识误区,仅仅参考讨论:

游戏软件比企业软件复杂?
为什么说企业软件时复杂的?因为企业软件是为应付需求而变,与游戏软件等软件相比,虽然一个游戏软件在代码数量级别上比企业软件复杂,但是游戏软件不必考虑跟随游戏用户需求变化,是游戏用户服务游戏设计规则;但是企业软件和其用户则相反,企业软件必须服从用户的变化,打个不是很确切的比喻:企业软件则类似市场经济中的市场人员,需要“看客户脸色”行事。而游戏软件则相反,类似以前朝南坐的政府人员;

因此,企业软件在动态概念上是随时间变化而变化,是由生命的,因为计划赶不上变化,所以企业软件制作时总是使用模式为将来变化预留余地,这种面向未来变化考虑方式无疑是最复杂的思维,就象股票变化将这种未来变化的残酷推向极致,我们都想计划未来,但是总是计划不了未来,这就是企业软件的复杂所在。

Class.forName神秘吗?
有人觉得Class.forName很神秘,神秘不在于本身,就是打开其编码研究到二进制也不能达到目的,它的神秘之处是因为应用在一个恰当之处,就象一块普通布没什么,但是如果从后面变出花了,你觉得这块布神奇了,Class.forName神奇之处在于其隐藏了对象创建,也一种是工厂模式实现。

同样,对于Collection,本来就是那几个种类List和Map,但是发现使用起来神奇得很,有人甚至研究过Collection的二进制,这和研究魔术师中一块普通布没有什么区别。Collection用于容器,作为对象集合;以及和单例结合实现缓存等,可以实现多种模式。

仅会算法就做企业软件吗?
在实践中,通常表示一个树形关系通过编码实现,例如1122334455表示是代号为11类别下代号为22类别下的代号为33类别下的....然后,在软件各处通过分析这个类别编码获得树形关系,这种将将具体数据和业务耦合在一起做法是受到抨击的。

那么如果我们要对树形关系的数据进行访问如何实现呢?首先我们将树形关系的访问分为两个部分:树形关系+功能实现。我们已经知晓树形结构的遍历,但是仅仅知道树形结构遍历还是不够的,我们还需要模式来解决树形关系访问这个通用问题,使用Composite模式可以方便客户端对树形结构访问,使得客户端不至于因为树形结构变化而变化不定;而访问者模式则不会总可能新增的新访问功能,导致树形结构中对象代码变化不定。
这两种模式协同发力,可以综合解决树形结构中对象群的访问。
http://www.jdon.com/jive/thread.jsp?forum=91&thread=23857

GoF模式打开的新境界
没有知晓GoF模式之前,我们总是以为编码就是写一些代码,然后运行,复杂吗?如果我们来分析一下GoF模式三个类型,你会发现平时熟视无睹的代码中隐藏如此多考虑方面。

GOF模式三种类型:结构型模式、创建型模式和行为型模式其实函括了OO编码的三个方面:静态类关系、类创建成为运行时对象实例;运行时的对象运行行为,也就是说,我们在编码阶段不但考虑现阶段各个类之间静态解耦关系,而且还要考虑这些代码激活后,运行时的情况。

而以往过程化编程中,编码状况=运行状况,如何先后编码,这些编码运行时就按照这些先后编码顺序执行,两者是统一的,不可能出现运行时可能和编码时预想不一样,更何况需要我们还要在进行类编码时,考虑这些类运行时是如何实现的,有如何对这些类运行时的关系进行解耦和分离呢?所以,我们“天生”就无法理解设计模式,因为我们从来就认为软件就是实现功能,哪里还会考虑到实现同样功能会涉及各种考量了呢?

如果说设计模式是程序员的圣经,那么不掌握设计模式可能就是异教徒,从此教徒和异教徒两者之间就缺乏沟通对话平台,就象鸡对鸭讲话了。

非模式思维的惩罚
面向对象软件体系是和面向过程体系格格不入的,面向对象的各种技术如单元测试 性能缓存等等都是OO体系,如果我们没有具备模式思维来编程,由此而诞生的软件架构必然失败,失败在哪里?通过性能惩罚你。最近碰到一个台湾的钢铁架构,它虽然包含一个简单的MVC框架,但是其Controller实际又是Service,该框架配置将下面几个元素耦合在一起:页面流程;控制类;Dao与VO,这实际是将表现层和持久层直接结合一起,这样的框架迫使程序员没有空间做中间领域模型层和服务层,进而整个体系变成一个两层耦合结构,这和传统的C/S没有区别,在Java中使用传统概念编程:如面向过程、面向数据表以及两层耦合导致结果是性能缓慢,很多大型项目就是这样最后是毁在性能上,服务器需要经常启动,一旦并发用户就很慢,服务器经常死机。

有人可能奇怪:非模式思维属于设计问题,怎么会对性能影响,这是将设计和性能对立起来,性能也是一种设计,池模式以及缓存也是属于模式啊,但是缓存的高效率应用是建立良好的对象设计基础上,或者说是良好的领域建模上,否则就是使用缓存,也会导致粒度或动态机制不准确,无法发挥缓存效率,甚至无法使用缓存
[/size]
分享到:
评论

相关推荐

    谈谈互联网思维对人力资源管理实战造成的巨大影响.docx

    互联网思维是近年来对企业运营模式和管理模式产生深远影响的一种理念,尤其在人力资源管理领域,这种影响更是显著。本文将深入探讨互联网思维的十大特征,并结合人力资源管理实践,阐述这些特征如何改变了传统的人力...

    创新思维需要破除的枷锁.pptx

    它是指过去的经验和知识在我们大脑中形成的固定思维模式,让我们在面对问题时习惯性地采用熟悉的方法。例如,在IT开发中,开发者可能倾向于使用他们熟悉的技术框架,而忽视了其他可能更高效或更适合新项目的技术。...

    “当今企业之间竞争不是产品之间竞争而是商业模式之间竞争”.ppt

    2. **创新思维**:引入新的理念和技术,打破传统框架,寻找新的价值创造方式。 3. **战略规划**:制定转型计划,明确目标和路径。 4. **执行与评估**:实施转型措施,并持续监控效果,根据反馈进行调整。 **五、...

    其他学科谈谈数学教学中如何培养中学生的创新思维能力.doc

    教师应转变传统的教学模式,不再仅仅是知识的传授者,而是成为学生学习的引导者和参与者。鼓励学生积极参与,开展课堂讨论,允许并鼓励他们提出自己的见解,甚至挑战教师的观点。这样的互动式教学可以激发学生的思维...

    谈谈诱思导学教学模式在农村中学政治课的运用.docx

    总的来说,"诱思导学"教学模式在农村中学政治课中的应用,能够有效提升教学质量,激发学生的学习兴趣,培养他们的思维能力和自主学习习惯,同时也促进了学生的情感教育和价值观培养。在实际教学中,教师需要根据具体...

    结合实际谈谈你是如何依据新课标深化课堂教学改革的?.pdf

    【标题】: "结合实际谈谈你是如何依据新课标深化课堂教学改革的?" 【描述】: 本讨论聚焦于如何依据新的课程标准改革小学数学课堂教学,以提高教学效果,激发学生兴趣,实现教学互动和共同发展。 【标签】: 教学...

    超越设计模式 软件开发

    设计模式作为软件开发中的重要工具,旨在提升代码的复用性和可维护性,但过度依赖特定模式可能导致思维固化。实际上,设计模式的本质是抽象出可复用的设计原则,而非固定不变的套路。本文将深入探讨超越设计模式本身...

    谈谈什么是互联网基因

    互联网基因,简而言之,是指企业在互联网时代下形成的一种独特的运营思维、战略模式以及技术应用能力,它深刻地影响着企业的成长路径、竞争优势以及市场定位。 ### 一、产品与用户体验 互联网基因的核心之一在于对...

    谈谈企业经济管理创新思路.doc

    面对全球经济的变化,企业必须紧跟时代的步伐,转变传统思维模式,适应如自媒体、互联网等新兴领域的发展。企业领导人需要拓宽视野,增加核心人才的知识储备,引入先进的管理理念,通过各种方式如培训、合作交流,...

    谈谈如何统一员工思想.doc

    【文档标题】:“谈谈...5. 领导示范:管理层需以身作则,展现出期望的思维方式和行为模式,影响和引导员工。 通过上述措施,企业可以逐步建立统一的思想基础,促进员工步调一致,为企业的持续成长提供坚实的基础。

    谈谈.Net技术面试

    3. **设计与架构**:面试者应展示对设计模式的了解,如单例模式,以及在不同场景下如何选择和应用。面试中可能会讨论如何处理多数据库支持或灵活的工资计算方式。此外,面试者需要阐述对软件设计原则的理解,如开闭...

    谈谈在教学中如何发挥自己的教学优势111.docx

    综上所述,发挥教学优势的关键在于创新教学模式,尊重和发挥学生的主体性,通过创设情境和启发式教学激发学生兴趣,培养他们的主动参与意识和思维能力。同时,教师需不断评估和调整教学策略,以适应学生的需求,提高...

    【谈谈信息技术学科学生创新能力的培养】信息技术课堂中创新能力培养.docx

    【谈谈信息技术学科学生创新能力的培养】信息技术课堂中创新能力的培养是一个至关重要的教育议题。随着社会对创新人才的需求日益增加,教育工作者需要在信息技术课堂中注重对学生创新能力的塑造。信息技术学科以其...

    谈谈自己对某一社会现象的看法.pdf

    这篇文档的标题和描述主要涉及的是作者对社会现象的个人观察和思考,特别是关于社会变迁、科技进步对...同时,它也展示了人类社会的动态性和不确定性,提醒我们在面对快速变化的时代时,需要保持开放思维和灵活应对。

    谈谈知识获取和机器学习.pdf

    《谈谈知识获取和机器学习》 知识获取与机器学习是人工智能领域的核心研究方向,它们旨在模拟和强化人类的思维过程,使计算机能够理解和处理复杂的认知任务。知识获取,特别是从专家系统角度,是构建有效的人工智能...

    谈谈竞品分析.docx

    5. 新立项的产品、拍脑袋想出来的没有形成较为有效完整的系统化思维和客观准确方向的。 如何进行竞品分析? 1. 确定哪些是你的竞争对手?包括产品直接竞争者、间接竞争者、同行业不同模式的、资本雄厚概念炒作的等...

    对于大数据的认识和理解-谈谈对数据的理解.pdf

    【大数据的思维模式】 大数据思维强调全样本分析而非抽样,注重效率而非绝对精度,关注相关性而非因果关系。例如,谷歌通过分析用户的搜索记录预测流感趋势,亚马逊利用用户购物和浏览历史进行个性化推荐,这些都...

    初中语文语文论文谈谈语文教学中的创新教育

    比如,采用“先学后教”的模式,鼓励学生自主阅读、思考问题,教师则作为指导者,引导学生解决问题,提高他们的思考和应变能力。 3. 创设新颖情境:在教学过程中引入新的情境或视角,可以激发学生的学习兴趣,培养...

    从电脑判案谈谈法律推理与人工智能的关系-论文

    法律推理是一种独特的思维过程,它不仅涉及逻辑推理,还融合了法律专业知识、社会价值观以及道德判断。法律推理的目标是在复杂的法律框架内寻找合理、公正的解决方案。其主体不仅限于法官、检察官和律师,还包括法学...

Global site tag (gtag.js) - Google Analytics