如何做详细设计之序

详细设计是软件开发中非常重要的环节,无论你是工作几年的技术大牛,还是只有一两年工作经验的小菜。可能你看到设计两个字,就觉得非常高大上,然而你只要在用心写代码,在思考如何定义方法,如何定义类,你都在做着详细设计。至于做的怎么样,那就另说了。

详细设计涉及哪些内容?

首先详细设计不同于架构设计,架构设计主要关注系统的架构模型、系统开发语言选型、系统数据存储方式选型、系统模块的划分以及系统模块间的关系,关键技术的选型,系统部署架构,系统硬件需求、系统的安全性扩展性等内容。

详细设计不同于代码实现,代码实现主要关注方法级别的算法实现,以及方法级别的调试,单元测试,以及各个模块间的接口联调。

那么详细设计是包括哪些内容?详细设计包括业务接口的定义、领域模型的定义、持久化层接口定义、关键业务设计模式的选用、关键业务模块的设计方案、关键方法的实现算法的选用等。当然如果web项目还包括请求响应接口的定义,我认为这是一个非常重要的工作。哪些地方可以使用ajax,哪些地方选用直接输出html。直接影响着响应速度以及用户体验。

详细设计需要具备什么能力?

1、深刻理解架构设计模型,理解为什么选用这种架构。这种架构对于目前系统的利与弊。

2、深入理解业务需求,并且能够预测部分需求的变化方向。能够理解业务的本质。

3、具备面向对象思维,熟悉面向对象的基本设计原则,熟悉设计模式、重构技术。

我只是暂时想到了那么多,还涉及其他能力。当然我也是在为达到以上的能力努力中。从以上可以看出,成为一名好的详细设计人员还是非常有难度的。这可能具备良好这种能力人少的原因之一吧。

详细设计重要吗?

当然对于一个小的系统或者一个简单的系统,详细设计做的非常好可能不是必须的。但是对于一个互联网产品,我认为还是非常重要的。现在很多互联网产品都提倡敏捷开发。在不断快速迭代的过程中,如果详细设计没做好的话,随着迭代版本的增加,代码会变得面目全非。甚至推倒重来。

1、详细设计决定着系统的质量。在软件系统开发过程中,可能一直存在这个问题,修了一个bug可能引起一堆bug,这个可能都不陌生。详细设计人员需要考虑设计的方方面面,比如职责如何分离,接口职责如何定义。可以有效减少这种情况出现的可能性。当然不能完全杜绝,^_^。

2、详细设计决定着系统的可扩展性。系统的扩展性,一直是一个头疼的问题。特别是在互联网产品中,需求变化之快,以及用户量增加又比较迅速。详细设计人员需要考虑业务方面的扩展性,也需要考虑一些性能上的扩展性(当然性能的可扩展性,大部分属于架构设计的范畴)

3、详细设计决定着系统的可维护性。可维护性指的是改正、改进、改动软件的难度,这个的控制大部分把握在详细设计人员的手里。详细设计做的好对于软件的迭代非常有利的。

4、详细设计决定着你需不需要加班。这个就不用说了。相信大家都明白。

我也是一位学习者

以上扯得够多了,本系统主要总结一些详细设计的方法,大家共同学习,首先我不是详细设计的大牛,只是菜鸟,之所以写本系列,主要是对于详细设计的一些思考总结分享给大家,使自己也能够技术上得到进步。对于本系列中的思考,非常感谢znyin,和他共事将近一年,学到了很多详细设计方法以及思想,给了我很多宝贵的实践机会,非常感谢,本系列也是我从他那学习的技术的总结。

本系列计划包括如下内容:

1、如何做详细设计之序

2、如何做详细设计之设计即编码

3、如何做详细设计之规范

4、如何做详细设计之设计原则

5、如何做详细设计之理解业务本质

6、如何做详细设计之重构

7、如何做详细设计之设计模式

8、如何做详细设计之总结

本系列文中观点仅是个人观点,欢迎讨论。

同步于yywang.info,每天同步一篇,同步至csdn

时间: 2024-10-14 06:56:35

如何做详细设计之序的相关文章

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

【Tyvj2133 BZOJ1146】网络管理Network(树套树,DFS序,树状数组,主席树,树上差分)

题意:有一棵N个点的树,每个点有一个点权a[i],要求在线实现以下操作: 1:将X号点的点权修改为Y 2:查询X到Y的路径上第K大的点权 n,q<=80000 a[i]<=10^8 思路:此题明显地体现了我对主席树理解不深 树上路径K大可以直接用树剖+二分答案+树做 但DFS序+主席树也可以 对于点U,它能影响DFS序上的区间(st[u],ed[u]) 所以维护方法就是类似序列K大一样 s[st[u]]++ s[ed[u]+1]-- 对于路径(x,y),信息为s[x]+s[y]-s[lca(x

(四十七)socket编程——socket引入、网络字节序、IP地址转换函数、sockaddr数据结构介绍

一.什么是socket socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,为TCP/

网络字节顺序 【转】

原文 http://www.cnblogs.com/uvsjoh/archive/2012/12/24/2830822.html ● 字节序的定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题).在大部分的开发中我们不需要考虑字节序的问题.唯有在跨平台以及网络程序应用中字节序才是一个应该被考虑的问题. ● 网络应用的字节序网络字节序是TCP/IP规定好的一种数据表示格式,它与具体的CPU类型.操作系统无关,从而可以保证数据在不

socket概述和字节序、地址转换函数

一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4.IPv6,以及以后要讲的UNIX Domain Socket.然而,各种网络协议的地址格式并不相同,如下图所示: IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位端口号和32位IP

FPGA那些事 --经典总结

规范很重要 工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的.逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了:如果一个项目做了一半一个人走了,接班的估计得从头开始设计:如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性. 在逻辑方面,我觉得比较重要的规范有这些: 1.设计必须文档化. 要将设计思路,详细实现等写入文档,然后经过

【转】ConcurrentHashMap完全解析(JDK6/7、JDK8)

转自http://my.oschina.net/hosee/blog/675884 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O).ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS

ConcurrentHashMap总结

原文出处: Hosee 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O).ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,无论对于

bstToDoublyList

.title { text-align: center } .todo { font-family: monospace; color: red } .done { color: green } .tag { background-color: #eee; font-family: monospace; padding: 2px; font-size: 80%; font-weight: normal } .timestamp { color: #bebebe } .timestamp-kwd