zoukankan      html  css  js  c++  java
  • 编码原则之接口隔离

    人类社会就是朝着越来越懒的方向发展的,可以只做一次的事情,就懒的做第二次;可以坐着去某处,就懒的走着去;无论是计算机的出现,还是软件行业的兴起,根本原因其实不是我们变懒了,而是我们变得学会偷懒了,其实偷懒也是一种艺术,也是能力的体现。
        开发免不了写代码,相同的代码为了只写一次,我们搞出了方法定义;为了能够供他人使用,我们定义出了工具方法类。从C到各种高级语言的出现,再到各种框架,各种组件库,无一不意味着人们对于重复劳动的厌恶。
        如果说模式的出现是针对一类问题的一个最优的解决办法,那么组件库的出现无疑是为了提高web应用前端开发的效率。无论是代码的简洁,还是使用的方便,都得到一个很大的提升。有的人会认为组件是个很神秘的东西,其实它无非是数据的一种展现形式,当你拥有一组数据,你可以选择多种形式来展现它,不管是下拉列表,表格,or树控件等。刨根问底是个好习惯,寻求最终的真相也不仅仅是福尔摩斯的兴趣,当然一切都得有个度。对于开发人员而言,如果遇到一个新技术,自己从来没有接触过的,那么在一定的范围内,我们必须要精通它,而不是简单的运用,你只有认识到了它的本质,你才有可能将它利用最大化,最优化。一句话,你才有可能写出最好的整合代码来衔接它。
        我想很多人都做过各种各样的整合,自己的系统与第三方的系统,或者是集成一个功能,最简单无疑是使用第三方的一个jar包。当你做这些整合的时候,有没有这样的考虑?是在自己系统的任意需要使用到的地方直接调用jar中的方法,来达到目的;还是说先构思好一个小型的应用骨架,将对于这个jar包的应用整合在一个小范围内,亦或是直接一个中间类,我们的系统调用这个中间类,由中间类封装调用第三方jar。模式中我们可以应用代理模式或者合成模式。这样做的好处:
        1.我们的系统与第三方的jar之间是一种弱耦合关系,想拆除或者更新只需修改中间类即可,我们的框架无需改动
        2.显然这样的改动符合java编码的原则之开---闭 原则:一个软件实体应当对扩展开放,对修改关闭。
        3.更利于代码的阅读和维护,因为一切相关的功能都在中间类,不会杂乱在系统中,调用关系一目了然。

    4.更高的代码复用率,相同的代码在整个系统中只会出现一次。
    其实这就是接口隔离思想的一种体现。
        web应用前端组件中最难写最常用的一个组件应该是树控件了,当你实现一个树控件的时候,有没有考虑一下上面提到的方法?如果考虑到了,一般应该怎样来实现呢。
        1.首先,确定一个中间类,这里我们把它叫做树模型:TreeModel
        2.确定这个类的职责:加载树,组装树节点。在实现一个具体类之前先明确这个类的职责,可以有效地让我们避免数据泥团等问题的出现
        3.考虑各种应用场景,各种树控件的具体实现,抽离出树控件实现的公共代码
        4.明确树控件与业务系统之间耦合的面,我们会发现当把一切剥离之后,树控件与业务系统之间的交互,仅仅是获取一些展示所需用的数据而已
        5.明确本质之后,将获取数据的操作封装成接口,利用接口隔离组件库与业务系统之间的耦合
        6.当主干TreeModel实现完毕后,我们可以考虑一些细枝末节。比如节点点击事件等,这些都可以做成接口,由模型持有引用即可。
    最终我们的业务系统只跟这个TreeModel相耦合,这样我们调试问题,阅读代码,或者是替换控件库,都一样不会太难。

  • 相关阅读:
    hdu1003 Max Sum【最大连续子序列之和】
    HDU 2639 骨头收集者 II【01背包 】+【第K优决策】
    poj2184 Cow Exhibition【01背包】+【负数处理】+(求两个变量的和最大)
    HDU 2955_Robberies 小偷抢银行【01背包】
    UVa 562
    HDU 1159 Common Subsequence 【最长公共子序列】模板题
    hdu 5748 Bellovin【最长上升子序列】
    POJ 3903 Stock Exchange 【最长上升子序列】模板题
    UVA 624 CD[【01背包】(输出路径)
    hdu 2546 饭卡【01背包】
  • 原文地址:https://www.cnblogs.com/komojoemary/p/2255537.html
Copyright © 2011-2022 走看看