系统设计(团队作业4)

1.修改完善已提交的需求规格说明书

2.讨论制定团队的编码规范

2.1 程序风格:

2.1.1 严格采用阶梯层次组织程序代码

  • 每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格

2.1.2 其他所有的提示信息必须定义在资源中。

  • 对变量的定义,尽量位于函数的开始位置。

2.2 命名规则

  • 变量名的命名规则
    分析:变量名的命名规则遵循用户自定义标识符命名规则
    (1) 只能由字母、数字、下划线组成;
    (2) 第一个字符必须是英文字母;
    (3) 有效长度为255个字符;
    (4) 不可以包含标点符号和类型说明符%,&,!,# ,@,$;

    (5) 不可以是系统的关键词比如else。

  • 变量标识符
    (1) 成员变量、局部变量使用lowerCamelCase风格(小驼峰法,首字母小写),如:inputUserId。
    (2) 变量命名不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    (3) 严禁使用拼音和英文混合的方式,更不允许直接使用中文的方式来命名。纯拼音命名方式也要避免使用,但国际通用的名称可视同英文,如:taobao, alibaba,xiamen等。
    (4)去掉没必要的公共变量。
    (5)仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
    (6)明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
    (7)当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。
    (8)防止局部变量与公共变量同名。
    (9)仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减 少引起误用现象。
    (10)结构的设计要尽量考虑 向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。
    (11)严禁使用未经初始化的变量。声明变量的同时对变量进行初始化。
    (12)编程时,要注意数据类型的 强制转换。

  • (1) 包名统一用小写,点分符号之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但类名如有复数含义,类名可以用复数形式。如:com.alibaba.open.util.MessageUtils。



  • (1) 类名使用UpperCamelCase风格(大驼峰法,首字母大写),如:XmlService, TcpUdpDeal, TaPromotion。

    (2) 抽象类命名使用Abstract或Base开头。

  • 枚举 (Enum)
    (1)枚举类名建议带上Enum后缀,如:DealStatusEnum。

    (2) 枚举成员名称需要全大写,单词间用下划线隔开。(枚举其实就是特殊的常量类,且构造方法被默认强制是私有)如:UNKNOW_REASON。

  • 参数
    (1)参数名使用lowerCamelCase风格(小驼峰法,首字母小写),如:localValue。
  • 方法
    (1)方法名使用lowerCamelCase风格(小驼峰法,首字母小写),如:getHttpMessage()。

  • 常量 (const)
    (1)常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。如:MAX_SOCKET_COUNT。
    (2)long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。如:Long a = 2l; 很难辨别写的是数字的21还是Long型的2。

  • 异常类
    (1)异常类命名使用Exception结尾。

  • 测试类
    (1)测试类命名要以它要测试的类的名称开始,以Test结尾。

  • 数组

    (1) 数组定义使用String[] args,不要使用String args[]的方式来定义。

  • 各层命名规约:

    (1) 获取单个对象的方法用 get 做前缀。
    (2) 获取多个对象的方法用 list 做前缀。
    (3) 获取统计值的方法用 count 做前缀。
    (4) 插入的方法用 save(推荐)或 insert 做前缀。
    (5) 删除的方法用 remove(推荐)或 delete 做前缀。

    (6) 修改的方法用 update 做前缀。

2.3 可读性

  • 注释规约: (1) 注释要简单明了。
    (2) 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性 。
    (3) 在必要的地方注释,注释量要适中。注释的内容要清楚,明了,含义准确。
    保持注释与其描述的代码相邻,即注释的就近原则。
    (4) 对代码的注释应放在其上方相邻位置,不可放在下面。
    (5) 对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域 的注释应放在此域的右方;
    同一结构中不同域的注释要对齐。 
    (6) 变量、常量的注释应放在其上方相邻位置或右方。
    (7) 全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
    (8) 在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成日期;

模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);
主要函数或过程清单及本文件历史修改记录等。

​ (9) 在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;

输入,输出及返回值说明;调用关系及被调用关系说明等。

  • 其他规约:

    (1) 循环体内,字符串的联接方式,使用 StringBuilder 的 append 方法进行扩展。(反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费)

    (2) 类成员与方法访问控制从严,要严控类、方法、参数、变量的访问范围。过宽泛的访问范围不利于模块解耦。
    思考:如果是一个 private 的方法,想删除就删除,可是一个 public 的 Service 方法,或者一个 public 的成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的视线内,变量作用域太大,会无限制的到处跑,那么你会担心的。

    (3) 所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。如:对于Integer var=?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

    (4) 关于基本数据类型与包装数据类型的使用标准如下:

  • 所有的局部变量【推荐】使用基本数据类型。

    (5) 类内方法定义顺序依次是:
    公有方法或保护方法 > 私有方法 > getter/setter方法。
    说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;
    保护方法虽然只是子类关心,也可能是“模板设计模式”下的核心方法;
    而私有方法外部一般不需要特别关心,是一个黑盒实现;
    因为方法信息价值较低,所有Service和DAO的getter/setter方法放在类体最后。
    (6) setter方法中,参数名称与类成员变量名称一致,this.成员名=参数名。在getter/setter方法中,尽量不要增加业务逻辑,增加排查问题的难度。

    (7) final可提高程序响应效率,声明成final的情况:

(1) 不需要重新赋值的变量,包括类属性、局部变量。

(2) 对象参数前加final,表示不允许修改引用的指向。

(3) 类方法确定不允许被重写。

2.4 代码编译

(1) 编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。   

(2) 同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。   

(3) 合理地设计软件系统目录,方便开发人员使用。   

(4) 使用工具软件对代码版本进行维护。

2.5 总结

  • 代码规范十分重要,写的规范,可以减少错误的发生。比如一个变量或者方法的命名,随便写一个符号,自己一开始可能还能知道,但时间久了,自己都有可能忘记是为什么而定义的了,更不用说别人。
  • 在团队合作中代码规范显得尤为重要,别人能看懂代码这是十分重要。
  • 还有代码的缩进,合理的缩进会使得代码看起来更清晰,更有条理。可以直接看出哪一行语句属于哪个函数,如果不规范代码,就会显得很乱,查看起来很浪费时间。
  • 所以代码规范有利于对代码的管理,检查及修改

3.数据库设计

  • 选择合适的数据库产品,完成数据库设计
    1296811-20181127130942955-1848090764.png

  • 在随笔中展示数据库设计的结果,至少需要包含ER图。

1296811-20181127130953377-2062225209.png

4.项目的后端架构设计

选择通用架构,由于方便调试,通用性强,适合前期开发

1296811-20181127131000430-1513161349.png

5.确定团队Alpha版本要实现的功能

  • 参考分而治之给出相应的WBS图

1296811-20181127131018320-1376109920.png

  • 利用象限法(《构建之法》 8.5)审核上一次作业所确定需求优先级,明确项目的核心功能

1296811-20181127131025529-726149260.png

  • 列出团队Alpha版本需要实现的功能,表格中至少应包含:优先级、名称、用户故事描述;用户故事描述可以参考模板“作为一个,可以,以便于”,用一句话说明

1296811-20181127131031750-507912100.png

6.关键技术与难点

6.1 程序进行数据交换的实现
网络socket技术

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

6.2 设置头像上传的实现
Java图片上传+回显技术

需求为给角色上传头像,通过添加页面对用户添加头像并回显,然后填写信息后进行表单提交,发送ajaxfileupload请求给java,java处理相应请求后,将图片上传tomcat服务器,最后将真实路径存入数据库,并在前台JSP调取相对应的img真实路径,最后显示在前台页面,整体需求完成。

6.3 拦截应用通知的实现
使用Xposed

拦截系统所有的通知信息,对其进行过滤,当信息是来自我们想要拦截的应用时,hook掉它。

7.团队管理

  • 描述组员在上述任务中的分工和工作量比例

    组员比例权重参与工作范围
    林恩17%团队管理,博客及排版等
    寇永明12%确定团队Alpha版本要实现的功能
    杨长元14%修改完善已提交的需求规格说明书,讨论制定团队的编码规范
    胡彤15%项目的后端架构设计
    李震13%数据库设计
    王浩11%关键技术与难点
    李杰18%确定团队Alpha版本要实现的功能
  • 请用Leangoo的截图来展示分工和完成的过程

1296811-20181127131049339-2115296475.png

  • 最后给出燃尽图

1296811-20181127131303288-1185437670.png

转载于:https://www.cnblogs.com/mumuyinxin/p/10012040.html

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电影院售票系统是一个非常典型的实时系统,它主要用于管理和协调电影院的各项售票活动。为了实现这个系统,可以使用UML进行系统设计。 首先,我们可以使用用例图来识别和描述系统的功能需求。通过与用户的交互,确定系统的用例,例如:购买电影票、查询电影信息、退票等。然后,我们可以为每个用例设计相应的详细活动图,以展示系统中的流程步骤和参与者之间的相互作用。 其次,类图是设计系统中对象模型的有效工具。在设计电影院售票系统中,我们可以定义一些主要的类,如电影、放映厅、座位和电影院等。这些类可以在类图中展示它们之间的关系,比如电影与放映厅的关系、放映厅与座位的关系等。 此外,时序图可以用来描述系统中的消息传递和对象交互。例如,在购买电影票的过程中,用户将选择电影和时间,然后请求系统返回座位的可用情况。这些过程可以通过时序图来更具体地说明。 接下来,状态图可以展示电影票的生命周期。比如,一张电影票可以具有"待售"、"已售"和"已退"等状态。状态图可以清楚地表示电影票在整个系统中的状态变化。 最后,部署图可以展示系统的物理架构。包括服务器、数据库和客户端等各个组件的部署位置和连接方式。 总而言之,使用UML进行系统设计能够更加清晰地描述电影院售票系统的功能需求、对象模型、消息交互、状态变化和构架。这有助于开发团队更好地理解和实现这个系统,提高系统的可扩展性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值