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

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

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

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. Beta Round #9 (酱油杯noi考后欢乐赛)PLQ的寻宝

    题目:http://www.contesthunter.org/contest/Beta%20Round%20%EF%BC%839%20%28%E9%85%B1%E6%B2%B9%E6%9D%AFno ...

  2. 【转】提供android 5.0 AOSP源码下载

    http://blog.csdn.net/innost/article/details/41148335 android-5.0.tar.gz 115网盘礼包码:5lbcl16a1k7q http:/ ...

  3. UVA 11624 Fire! (bfs)

    算法指南白书 分别求一次人和火到达各个点的最短时间 #include<cstdio> #include<cstring> #include<queue> #incl ...

  4. JavaScript高级程序设计43.pdf

    事件类型 Web浏览器中有很多事件类型,“DOM3级事件”规定了以下几类事件 UI事件(用户界面),当用户与页面上的元素交互时触发: 焦点事件,当元素获得或失去焦点时触发 鼠标事件,当用户通过鼠标在页 ...

  5. [zz] makefile中=和:=的区别

    转载自:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 在Makefile中我们经常看到 = := ?= +=这几个赋 ...

  6. Closure Compiler(封闭编辑器), Closure Inspector, Closure Templates, 封闭图书馆(Closure Library) Google- 摘自网络

    谷歌日前宣布,将自己开发者使用的一系列工具对外开放.这些工具曾用来开发谷歌的主要产品,包括Gmail.谷歌文档(Google Docs)和谷歌地图(Google Maps). 第一个工具叫做Closu ...

  7. Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全

    http://blog.cnbluebox.com/blog/2014/07/01/cocoashen-ru-xue-xi-nsoperationqueuehe-nsoperationyuan-li- ...

  8. hdoj 5461 Largest Point

    Largest Point Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  9. 搜索(DFS)

    不知道为什么~除了我室友其他的同学都觉得DFS很简单~且比BFS容易得多........我真心不觉得啊T T~我真心觉得BFS比DFS简单得多................= = 为了把DFS完全搞 ...

  10. 内容提供者(Content Provider)——跨程序共享数据

    内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...