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

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

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

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. Android 应用页面延缓载入

    1.新建一个线程,使用handle的延缓运行线程 new Handler().postDelayed(new Runnable() { // 为了减少代码使用匿名Handler创建一个延时的调用 pu ...

  2. Android——监听开机启动,自启动应用程序

    1.首先继承一个broadcastreceiver public class ConnectBroadCastReceiver extends BroadcastReceiver { @Overrid ...

  3. Yii框架中ActiveRecord使用Relations

    参考文章: http://blog.csdn.net/yjj1s/article/details/6885276 http://www.gowhich.com/blog/38 http://www.c ...

  4. mongodb在window下和linux下的部署 和 安装可视化工具

    Windows安装    安装Mongo数据库: 在发布本文的时间官方提供的最新版本是:2.4.0 ,如果不做特殊声明,本教程所用的版本将会是这个版本. 第一步:下载安装包:http://www.mo ...

  5. http协议和web本质

    转载:http://www.cnblogs.com/dinglang/archive/2012/02/11/2346430.html http协议和web本质 当你在浏览器地址栏敲入“http://w ...

  6. SQL Server Reporting Services 自定义数据处理扩展DPE(Data Processing Extension)

    最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络 ...

  7. Prof UIS相关

    Prof UIS 一款国外的VC++仿XP系统风格的免费界面库控件,含有近20个应用实例,每一个都可以顺利编译,用它生成的菜单类似OFFICE菜单一样,比起传统的窗体视觉舒服多了,VC编程的朋友对照文 ...

  8. RichTextBox选中文本时往自己的其他的位置实现拖拽

          private void Form1_Load(object sender, EventArgs e) { richTextBox1.AllowDrop = true; richTextB ...

  9. [rxjs] Throttled Buffering in RxJS (debounce)

    Capturing every event can get chatty. Batching events with a throttled buffer in RxJS lets you captu ...

  10. Android之PreferenceActivity 详解

    看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找. PerferenceActivity是什么,看下面的截图: ...