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

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

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

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. Eclipse中添加android sdk javadoc和source

    在 javadoc location path中添加file:/D:/Android_SDK/sdk/docs/reference/   在 source attachment中添加为 Externa ...

  2. 如何禁止anonymous用户访问nexus

    nexus在默认情况下是允许anonymous用户浏览仓库,并下载仓库中的jar包的,如果我们搭建的私服是有公网IP的,必须要进行设置,使得anonymous用户的权限被禁用.操作步骤如下: 使用管理 ...

  3. 【pm2】

    告别node-forever,拥抱PM2 pm2及forever模块是目前较常用的nodejs进程守护模块,前者更常用些.功能也更强大(提供负载).其原理主要是pm2开启一个主进程,另行再开子进程运行 ...

  4. easyui-lang-zh_CN.js导入后还是英文提示

    <script src="/js/easyUI1.3.3/jquery.easyui.min.js" type="text/javascript"> ...

  5. Unity3D与iOS消息交互方法(1)--iOS接收Unity3D发出的消息

    跨平台这种事情不管多NB, 总要有些与原生系统交互的方法, 比如  Unity3D与iOS消息交互方法. 一: 建立一个空的Unity工程. File -->  New Project 二: 编 ...

  6. 开始学习C# string and regex,学习正则表达式

    最近看的太少喽,再多看点吧,这周要看完这本书的 第一章 系统处理文本的方式 c#的CLR(Common Language Runtime 公共语言运行时),主要为程序提供虚拟运行环境,和内存管理和垃圾 ...

  7. bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)

    1513: [POI2006]Tet-Tetris 3D Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 540  Solved: 175[Submit ...

  8. [SAM4N学习笔记]LED点灯程序

    一.准备工作:      将上一节搭建的工程模板复制一份,命名为"1.blink",这作为我们开发的第一个程序. 二.程序编写:      板子上只有一个可控制的LED,就是LED ...

  9. eclipse设置项目发布到tomcat webaap下

    之前用myeclipse,自动deploy到web app下.目前的项目换了eclipse,项目被发布到本地,通过一个链接到tomcat中,很不习惯. 设置的地方很隐晦,在tomcat中,而不是在pr ...

  10. 【转】【阮一峰的网络日志】Git 使用规范流程

    作者: 阮一峰 日期: 2015年8月 5日 团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是Th ...