设计指导原则

标签: 设计 原则 | 发表时间:2014-10-18 15:38 | 作者:liuguofeng
出处:http://www.iteye.com

http://www.cnblogs.com/netfocus/p/3831901.html

一. 性能相关:

  1. 避免在循环内部new一些没有必要每次都new的对象。
  2. 所有与IO相关的操作,都需要考虑性能问题,一般采取的措施是连接池,缓存,减少调用次数,合并请求。
  3. 每个业务都要分析整个请求链路,找到瓶颈,通过压测的方式确认问题及验证解决方案。
  4. 根据业务情况,使用异步化和最终一致性。
  5. CPU,内存,网络IO,磁盘IO这些瓶颈,需要知道在合适的场景牺牲什么换取什么。通俗的讲是空间换时间,还是时间换空间。不同业务场景下,要做合理的取舍。例如多线程并发查询后merge。这个就是利用CPU,内存换取速度。
  6. 善于借鉴业界成熟通用的解决方案来解决问题。要知道什么场景适合用什么,每个产品的最佳实践是什么要清楚。
  7. 学会通过业务视角解决技术问题。例如:如果没有分库分表,支付宝的大量交易数据的并发性,可能永远无法解决。适当的时候,需要根据用户ID去分库分表,分散数据库IO瓶颈。避免只从技术角度考虑问题,陷入死胡同。
  8. 使用新技术新协议时,一定要分析出最佳使用场景,不能盲目相信。搞懂原理,才能通过最佳实践发挥性能优势。

监控相关:

  1. 监控分为系统监控,应用监控,业务监控。系统监控一般监控网络IO情况,磁盘IO,空间,CPU,内存等等。应用监控一般监控JVM的内存,GC情况,日志中的异常情况,SQL,SPRING方法等的耗时情况。业务监控一般监控一些业务指标,如PV,UV,交易的变化趋势等等具有业务含义的数据。
  2. 做好容量规划,避免无法支持业务增长,监控好容量。
  3. 对于调用链路非常深的系统,做好链路监控,及时发现瓶颈。

安全相关:

  1. 不要为了维护方便,在代码里留后门;之前review代码发现有这些问题。
  2. 涉及到用户密码等,一定要散列哈希算法加密存储。
  3. 关键用户敏感数据(如:信用卡数据)不能存日志文件中,避免主机漏洞被拖拽。很多互联网公司就发生了这样的事情。
  4. 要考虑完整业务链路的安全,不仅仅是某一端的安全问题。
  5. 充分利用公司已有的安全团队的产品及规范,避免产品出现安全漏洞,代码安全这块加强和安全同学一起REVIEW。
  6. 要注意开发环境和生产环境信息做隔离,避免因在开发环境中泄露导致生产环境安全问题。
  7. 不在外网分享带有业务规则及需要保密信息的内部文档。

规范相关:

  1. 幂等性:所有对外暴露的接口,需要做到幂等性。
  2. 隔离性:对同一个数据源的操作,建议由一个服务向外暴露,避免多个不同系统操作同一个数据源,特别是避免修改操作。
  3. 对开源的第三方包,一定要有源码。
  4. 线程安全:要时刻关注线程安全问题。每个业务都要考虑代码是否是线程安全的。
  5. 关于编程模型,不做强制要求;但是有一个原则就是,这块技术是主流的,外部容易招聘到相关人才,技术体系是完善的,容易学习和发展定制。
  6. 关键代码及业务逻辑,一定要有注释。
  7. 每个系统的设计及需求,接口等,一定要有文档。方便沟通交流以及团队的传承交接。
  8. 不用存储过程去实现复杂的业务逻辑,原则见第2点。
  9. 日志记录,格式要统一,存储路径和位置,以及磁盘满了之后日志转移的机制要完善。
  10. 系统设计一定要组织Review,避免设计的不合理导致后续扩展性不好。Review的角度,考虑业务的扩展性及发展方向是一个重点。
  11. 重点业务的单元测试和接口测试用例一定要有且全面,要养成用单元测试和接口测试来保证业务逻辑正确性的习惯,且还能大大提高后期系统维护的成本;
  12. 统一使用PE提供的运行环境和容器,特殊定制化容器场景一定要充分测试。

异常处理相关:

  1. 要区分好业务异常还是系统异常。为每种异常定义好处理方式。
  2. 避免抛出大量异常不处理。
  3. 异常为了方便系统间传输,一般需要约定errorCode。例如场景:可以根据错误编码,将异常翻译成多国语言。
  4. 跨进程调用,不要将整个异常堆栈传递过去。

设计模式相关:

  1. 模块之间避免循环依赖
  2. 尽量使用接口解耦应用
  3. 代码中使用分层设计的思想
  4. 高内聚低耦合


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [设计 原则] 推荐:

Android设计原则

- - 所有文章 - UCD大社区
译者按: 在 iOS HIG已经强大经典了N年之后,Android终于推出了一套比较系统的 HIG(大概是为了配合Android 4.0 Ice Cream Sandwich). 仔细比较两套HIG的“设计原则”部分,发现完全是截然不同的两种风格. iOS HIG走的是更专业型的路线,描述严谨且有不少的专业词汇(比如Metaphors、Consistency之类的).

设计指导原则

- - 企业架构 - ITeye博客
避免在循环内部new一些没有必要每次都new的对象. 所有与IO相关的操作,都需要考虑性能问题,一般采取的措施是连接池,缓存,减少调用次数,合并请求. 每个业务都要分析整个请求链路,找到瓶颈,通过压测的方式确认问题及验证解决方案. 根据业务情况,使用异步化和最终一致性. CPU,内存,网络IO,磁盘IO这些瓶颈,需要知道在合适的场景牺牲什么换取什么.

MySql 之表设计原则

- - 互联网 - ITeye博客
1) 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之 间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表 结构的重构提供可能性.

设计模式和设计原则

- - 编程 - 编程语言 - ITeye博客
26.1  设计模式和设计原则. 26.1.1  设计模式和设计原则的关系. 面向对象的分析设计有很多原则,这些原则大都从思想层面,给我们指出了面向对象分析设计的正确方向,是我们进行面向对象分析设计应该尽力遵守的准则.        而设计模式已经是针对某个场景下某些问题的某个解决方案. 也就是说这些设计原则是思想上的指导,而设计模式是实现上的手段,因此设计模式也是应该遵守这些原则的,换句话说,设计模式就是这些设计原则的一些具体体现.

一些软件设计的原则

- 夕角 - 酷壳 - CoolShell.cn
以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则. 相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一个好的程序员通常由其操作技能、知识水平,经验层力和能力四个方面组成. 在这里想和大家说说设计中的一些原则,我认为这些东西属于长期经验总结出来的知识.

web交互设计原则和模式

- shallwelin - 译言-
原文作者:Bill Scott. 原文链接:Designing Web Interfaces Principles and Patterns for Rich Interaction. web界面设计(丰富交互设计的原则和模式). (本书英文版大家可以到我blog下载:http://blog.youmila.com/?p=325).

分层架构设计原则

- - 博客园_首页
通常一个软件系统都包含不同部分互相交互耦合,我们希望设计能够将系统划分为有意义的各个部件,各个部件能够独立的开发、演进、部署. 这时整体性的设计已经无法满足这些挑战,这就需要我们对系统进行合理清晰的划分. 通常我们为待开发的系统定义多个层次,每一层完成独立的功能. 1:系统分为多层,每层完成独立的功能,层内部继续细分子模块,每层能够独立演进、部署.

设计模式原则总结

- - IT技术博客大学习
0、单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因. 一、”开放-封闭”原则(OCP) 在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则. 即软件实体(类、模板、函数等等)应该可以扩展,但是不可修改. 【通俗】:设计的时候,时刻考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动.

类设计的5个基本原则

- - CSDN博客编程语言推荐文章
我们常说啥面向对象三大特性:封装,继承,多态.另一种说法是:抽象,继承,动态绑定. 然后就是面向对象五大设计原则,面向对象的设计其实说到底就是类的设计嘛,没有了类就自然不能叫面向对象了.当然了像C#中还有所谓的接口(interface),把它理解成一个特殊的类好了.. 我觉得 面向对象的应用中最难的就是类的设计,怎么设计好一些类没有固定标准,只有一些参考原则.所以设计类不只是技术活,而且是个艺术活..