我曾经搞过应用程序的设计,当时只是读了半本宝典《重构...》,现在看来就这半本九阴真经,收益甚多啊 。再加上这现年工作上的印证,基本上可以拿出喷一下了。当然现在看来当年的项目设计真是很烂了。

第一个问题,什么是设计?我的回答是:为了提高程序执行效率,对程序按照模块划分,并且合理组合。往后我将继续沿用这两个点,模块划分和合理组合。

第二个问题,设计的原则?我的回答是:低耦合,高内聚是设计唯一的原则。有可能你还要问不是还有五大原则么?这里我将这五个原则一一道来。

1  单一职责原则。什么是单一职责?就是一个类,或者一个模块之负责一个任务,一个事情。例如数据库模块,就负责数据存储,并提供数据存储的读写接口,而一点点也不关心业务。回头问为了什么?答案是,为了提高内聚。

2  依赖倒置原则。原本是上层的业务实现,需要底层的模块支持,通过解析数据包,很早的时候使用的是解析xml。现在是解析json。那么如果从xml切换到json时上层业务还需要修改的话,这就没有做到很好的耦合。依赖倒置就是解决这个类问题,把上层业务对底层的依赖从实体抽象到接口。这个接口有两个作用,一是契约的意思,谁能够遵守这个契约,谁就可以上。二是分割的意思,这个接口之上是上层业务,以下是实现单元。回头问为了什么?答案是,为了低耦合。

3 里氏替换原则。这个针对基类和子类一个较为严格的要求。即无论一个子类如何实现都应该保持父类对外的接口功能,这样子类才可以替换完整的替换父类,而具有同样功能的子类可以相互替换。一块肉,喂给狼可以 ,喂给老虎可以,喂给狮子也可以,但是喂给牛是不行的。因为牛的父类是食草动物,没有吃肉的接口。答曰,低耦合,易于移植。

4 接口隔离原则。这个是针对接口的一个要求,是一个外围要求,即一个接口不能将风马牛不相及的接口都写在一个接口类里面。接口类也应该保持单一职责原则。但是对风马牛不相及的的接口要各自写个各自的。总之上帝归上帝,凯撒归凯撒。答曰,高内聚。

5 迪米特原则。意思是一个类对于它的依赖类竟可能的知道的越少越好。而依赖类则是尽可能少的暴露实现。在放大到一个模块中,模块之间的类尽可能的依赖模块中的类,但是不对外面或者很少的对外面暴露模块内部的类。答曰,高内聚。

最后一个就是开闭原则。即对接口进行开放,对实现进行封闭,这样即便是出现问题提也是内部实现问题,不用修改接口。要知道修改接口,就要修改依赖类,改动很大的。其实以上的其他原则都是实现了开闭原则。这也是降低耦合提高内聚的法子。

这些都是太抽象了,明天写一点具体的。

Android 设计随便说说的更多相关文章

  1. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  2. Android 设计随便说说之简单实践(模块划分)

    上篇随笔随(Android 设计随便说说)便说了一下什么是设计以及设计的原则,这里举一个简单的例子来进一步的说Android设计.我们以应用商店的设计来举例. 在设计之前,需要把握两部分内容,才能使得 ...

  3. Android 设计随便说说之简单实践(消息流动)

    在上面两篇分别说明了设计中较为简单也是很关键的实践点. 第一模块划分,它是根据每个模块所承载的业务,进行划分,是应用程序一个静态的描述. 第二合理组合,它是是将每个模块调动起来,共同实现业务,是一个准 ...

  4. android设计准则

    ------------缘由-------------------------------------------------------------------------------------- ...

  5. 【转】Android设计中的.9.png

    来源:http://isux.tencent.com/android-ui-9-png.html Android设计中的.9.png 注意:当使用9.png做TextView背景时,一定要设置内容区域 ...

  6. android设计的布局在阿拉伯语下界面错乱的解决方法

    (1)正在AndroidManifest.xml声明文件的application元素中,增加” android:supportsRtl=true” (2)建] androidの设计的布局在阿拉伯语下界 ...

  7. Android设计中的.9.png图片

    .9.png是一种能够自己定义拉伸特定区域的图片格式. 简书:Android设计中的.9.png图片 在Android的UI设计开发中,非常多控件须要适配不同的手机分辨率进行拉伸或者压缩,这样就出现了 ...

  8. Android 设计一个菱形形状的Imageview组件.

    网上没有资料,特来请教下大神 Android 设计一个菱形形状的Imageview组件. >> android这个答案描述的挺清楚的:http://www.goodpm.net/postr ...

  9. android设计,图标等概述

    作者:郦橙 锦妖 链接:https://www.zhihu.com/question/36813390/answer/87029428 著作权归作者所有,转载请联系作者获得授权. 简单复制,用于记录, ...

随机推荐

  1. bzoj1023

    研究了一下仙人掌首先,仙人掌虽然不是树,但却有很强的树的既视感如果把每个环都看做一个点,那么他就是一棵树当然这不能直接缩环,因为环和环可以有一个交点如果是树,求直径都会做,令f[i]表示i到子树的最长 ...

  2. App架构经验总结(转)

    原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构 ...

  3. ☀【jQuery插件】DOM 延迟渲染

    test.html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...

  4. xamarin for vs2013

    安装需求(下载的包及版本) 先安装VS2013 然后到官网下Xamarin,运行后会自动下载以下文件 这是下载的详细列表 jdk-6u39-windows-i586.exe(69.73M) Andro ...

  5. 开发神器之--Sublime Text

    原来还有这么个神器啊,忍痛丢掉了notepad++,投入她的怀抱!! 使用和介绍就不写了,大牛们已经整理了. 官网:http://www.sublimetext.com/ 入门及心得:http://w ...

  6. ARM学习笔记5——程序状态寄存器

    当前程序状态寄存器CPSR可以在任何位处理器模式下被访问,它包含条件码标志.中断控制.当前处理器模式以及其他状态和控制信息.CPSR的结构图如下: 一.条件标志位 CPSR最高4位:N(Negativ ...

  7. JSP页面同时操作所有Input输入框

    项目里要写个function,对页面上所有input输入框进行非空判断,对非空input全部置为readOnly,提交的时候判断是否有空白项目. var inputs=document.getElem ...

  8. vmware下linux 如何添加硬盘

    1.在虚拟机的设置中增加一块硬盘.   setting -> add disk -> create a new virtual disk -> SCSI   设定大小,这里给3G:更 ...

  9. 1109 html5 xhtml;

    XHTML 是 XML 风格的 HTML 4.01. HTML5 是下一代 HTML,取代 HTML 4.01. XHTML是基于XML发布的HTML规范,旨在规范HTML的格式. 两者提出的目的是不 ...

  10. 制作一个html中闪动的title 来提示消息

    var flashTitlePlayer = { start: function (msg) { this.title = document.title; if (!this.action) { tr ...