B端产品设计:从产品角度谈“软件模块化设计”软件工程

软件模块化设计是软件工程领域的概念。本文结合笔者ToB产品设计的经验,从产品经理的角度谈谈什么是软件模块化设计,以及为何它被奉为产品设计的基本原则之一。

01软件模块化设计,“偷懒”利器

为了提升写作效率,几乎任何一款编辑器都少不了“复制”“粘贴”这两个功能,对于需要编辑冗长代码的软件开发人员更是如此。但程序猿们并不满足于此,他们创建了一种开源社区,从而可以“复制”其他人共享的代码,他们把这种共享的理念叫做“不要重复造轮子”。

业务方频繁改动需求令程序猿们很是头疼,他们希望以最小的代码改动来实现业务方相要的效果;同时,当业务方提出新需求时,尽量不去动已经写好的代码……

基于以上实用性、高效率的工作需要,程序猿们创造一个“软件模块化设计”的概念:

把一个很大很复杂的系统,按照功用性,划分成若干个模块,每个模块完成一个确定的功能;然后在这些模块之间建立相应的联系(接口),通过模块间的互相协作,最终实现业务方提出的需求。

举个例子,对不懂技术的业务方来说,上传文件和上传图片是两个完全不同的动作,但对程序猿来说,这两个动作其实可以抽象成一个行为(或功能)——“上传”。这时,假如一个系统出现多处需要“上传”功能的模块,程序猿只需要把相应的代码复制过去,根据业务方需要做简单的修改即可,不必再重新编辑。

以上就是“软件模块化设计”在软件开发领域最实用的两个意义,除此之外,还具有使系统结构清晰、代码简洁、良好扩展性、便于分离、适应业务变化等优点。

产品经理距离“软件模块化设计”最近的时候就是画原型图!比如Axure中的“母版”功能、“动态面板”、“框架”、页面分级编组、图层编组等等,我们可以仔细想想每次使用这些控件时,都是出于什么目的:

02模块化设计对产品经理的帮助

产品经理在互联网时代以前,主要归属于市场营销部,职能是快速响应市场需要,对产品盈亏负责;软件类产品的设计工作直接由开发部门负责。

进入互联网时代,尤其是移动互联网,产品版本迭代速度加快,开发部门越来越需要一个专门负责解读用户需求、研究用户体验,并将需求整理后传递给开发人员的职能角色。产品经理自此才逐渐成为互联网行业的一个重要角色。

产品经理与程序猿之间的这些渊源,决定了产品经理需要了解一些类似软件架构设计理念,或者是逻辑严谨的思考方式。一方面可以更友好、更准确地跟程序猿传达设计要点;另一方面也能够帮助自己处理“具象的、数量繁多的、无逻辑的、琐碎的”用户需求。

软件模块化设计有两个很重要的步骤——归类和抽象,完成了这两步才能确定最终要做哪些模块、哪些功能。

比如说,单选题、多选题、判断题同属于客观题,这叫归类;单选题是“拥有4个选项,答案唯一的题目”,多选题是“拥有4个选项,以“且”关系连接的多答案题目”,判断题是“拥有2个固定选项,答案唯一的题目”,这叫抽象。

产品经理在跟业务方沟通时,经常会遇到各种各样的专业名词、行业限定下的特殊场景,这些名词在业务场景中可能代表着不同的含义,但是在软件开发中却可以用固定的、已有的简单名词来表述。

对需求做归类和抽象,不仅仅是为了跟程序猿沟通,更重要的是帮助产品经理认识到需求的实质,也使自己的设计工作“不要重复造轮子”。

对需求完成归类和抽象后,必然面对“如何联系”这一问题——模块之间有无前后置关系,数据流向是怎样的?

比如说,经过归类抽象,我们决定开发“题库管理”“试卷管理”“教学管理”三个产品模块;这时就需要思考这三个模块之间的关系:

经过逐级演化,最终我们可以得出这三个模块之间的关系图谱。

经过一系列归类、抽象和关系确定,我们可以得到一张UML用例图、一张活动图,甚至状态图、时序图和数据库设计;这些流程图相当于一张标注过路线的产品地图,有了路线图就可以直接进入产品设计阶段了(UML图可以使程序猿直接进入开发阶段,不一定非得等到原型图出来)。

当业务方提出需求变更时,我们可以对照这些图例:哪些需求是原有需求的变种,哪些需求是真正的新增,这些需求是否在预期的开发路线上,是否能够在系统中实现,对系统的影响有多大……

总之,当产品经理对产品有了模块化的概念化,会很轻松地应对来自客户的需求新增和变动。

03模块化设计的5个显著特征

前文通俗地还原了软件模块化设计的原貌,最后总结一下软件模块化设计的5个显著特征:

1.层次分明

可以简单理解为设计一个结构合理的树状菜单。

2.抽象与细分

抽象:只考虑要解决的问题(用户需求),不考虑实现方法;

细分:强调对需求的逐步分解,分解时仅较上一部分增加少量的细节。

例:

用户想要实现在线报销的功能,那我们就给他做一个“报销软件”,这个“报销软件”就是抽象出来的实体;

接下来要对“报销软件”进行第一次分解:报销信息填写、发票识别与验真、审批;

第二次分解“发票识别与验真”:发票信息录入、发票真伪性验证、发票是否已用验证;

第三次分解“发票是否已用验证”:历史已用发票查询、历史已用发票编号对比……

3.组成独立

在软件工程领域也被成为“信息隐蔽”,意思是在设计和确定模块时,使一个模块内包含信息(流程或数据),对于不需要这些信息的其他模块来说是不能访问的。

“报销单”包含单据编号、单据类型、单据金额、提交人、提交日期等信息,但“财务分析”模块只需要用到单据金额、提交日期两项数据,那么就只允许“财务分析”模块通过接口调用的方式访问这两项数据,其他数据一概不能访问。

4.面向数据结构(面向接口)

软件系统一般由逻辑(算法)和信息两部分构成,信息又分为内容和数据;逻辑是构建软件功能的骨架,内容和数据是血肉,其中以数据尤为重要。

假如要实现软件模块化且模块之间相互独立,必须要先抛弃逻辑(实现方法),因为有逻辑就代表这两个模块谁也离不开谁,就不能称之为独立。

如果这两个模块必须要关联在一起,但又不允许它们在逻辑上互相干涉,那么最好的办法就是为它们内部包含的数据进行抽象化,形成标准化接口,以数据调用的形式实现两个模块间的互相协作。

5.高内聚,低耦合

这里要解释一下,其实“高内聚,低耦合”才是软件开发的内在要求,“模块化设计”只是实现“高内聚,低耦合”的其中一种方法。

“高内聚,低耦合”是判断软件设计好坏很重要的一个标准,关于如何达到这一要求,本文不作重点介绍,大家可以自己查查资料简单了解一下。

04兼顾考虑用户体验和市场需求

模块化设计并不只是为了提高软件开发效率、适应快速变化,它在一定程度上也代表了最优的用户体验和市场需要。下面举几个例子:

本文由@产品路漫漫原创发布于人人都是产品经理。未经许可,禁止转载

THE END
1.软工毕业设计开题分享或者选择下面学长推荐的这些选题和项目,都是精挑细选适合当下学校教学环境的项目,大家可以用于学习和参考。 2 选题概览 毕业设计 基于协同过滤的电影推荐系统 毕业设计 基于wifi的室内定位算法设计与实现 毕业设计 基于opencv的银行卡识别 毕业设计 基于python的答题卡识别评分系统 https://blog.csdn.net/ncihsu/article/details/144420880
2.软件工程设计选题2ATM系统UML建模设计.pdf软件工程设计选题2_ATM系统UML建模设计.pdf,ATM 系统 1、ATM 系统总体需求与功能模块 系统是一个复杂的软件控制硬件的系统,各功能模块协调工作。以具体ATM 业务为出发点对它进行建模,一个功能齐全的ATM系统包含以下几个模块: (1)读卡机模块 客户银行卡插入读卡机,读卡机https://m.book118.com/html/2024/0301/7123133101006045.shtm
3.软件工程课程设计报告软件工程课程设计报告 课题名称:员工工资管理系统的设计与实践研究 姓名:学号:班级:指导教师: 目录 1.概述 4 1.1问题的提出 4 1.1.1 选题背景与意义 4 1.1.2 开发工具简介https://www.unjs.com/fanwenwang/gzbg/20170729000008_1409357.html
4.软件工程题库第四章概要设计正确答案: B:软件概要设计; 6.(单选题)内聚是从功能角度来度量模块内的联系,按照特定次序执行元素的模块属于( )方式。 A. 逻辑内聚 B. 时间内聚 C. 顺序内聚 D. 过程内聚 正确答案: D:过程内聚; 7.(单选题)软件结构图能描述软件系统的总体结构,它应在软件开发的( )阶段提出。 https://developer.aliyun.com/article/1279317
5.网上开题报告在整个系统设计过程中,应用软件工程的技术与方法、遵循软件开发的一般过程,使用面向对象的开发方法,基于B/S三层结构(界面层、业务逻辑层和数据访问层)进行实训课程材料提交系统的设计,面向流程进行需求分析,面向元数据进行概要设计,面向对象进行详细设计和编程实现,对系统进行单元测试、集成测试。三层的主要运行流程如图3https://mip.jy135.com/kaitibaogao/1115768.html
6.软件工程第四次团队作业(系统设计)派生C软件工程-第四次团队作业(系统设计) 团队成员列表: 本阶段任务分工: 201730141215(王阳):博客总结,文档归纳,分配任务,数据库设计说明书文档 201731062302(鲜雨珂):答辩ppt制作,选题计划部分文档 201731062128(邓婕):选题计划文档,需求规格说明书文档,详细设计说明书文档https://www.cnblogs.com/SW-P-WY/p/10841751.html
7.(精选)计算机毕业设计6篇二、评估预测系统的开发研制 (一)基本原理与方法 如何实现评估过程从定性到定量的转变,是开发研制该系统的关键所在。我们依据高等教育评估的原理,采用模糊综合评价的基本原理和方法,给出了建筑工程专业毕业设计(论文)评估的量化模型,具体步骤如下: 1.建立毕业设计(论文)评估指标体系。一级指标分为教师、学生、选题、https://www.fwsir.com/fanwen/html/fanwen_20240915093109_3981108.html
8.软件工程毕业设计开题报告范文(精选6篇)软件工程毕业设计开题报告 篇2 一、 课题任务与目的 本课题的研究目的,主要是结合java和数据库理论,设计一套符合对网管中心所负责的大量网络设备和计算机相关配件、耗材进行动态管理的软件系统,以提高管理水平,减少因管理不及时带来的失误和隐患。 主要完成的任务有: https://www.yjbys.com/bylw/kaitibaogao/53165.html
9.软件工程开题报告15篇此阶段的主要内容有:在细节方面对系统的一个整体的维护,以及对处理相应的异常和系统的实践检测 五、参考文献 1、《C#高级编程》(美)内格尔(Nagel.C)等著;李铭 翻译;黄静,清华大学出版社。 2、《设计模式》 Erich Gamma 软件工程开题报告2 一.研究背景、概况及意义 https://www.ruiwen.com/baogao/5594177.html
10.内附源码和文档基于Web在线考试系统的设计与实现由于采用B/S设计模式分层思想,同时根据软件工程的管理思想及系统分析的设计与分析的思想进行系统的开发,利用Java语言开发Web应用程序,提供String+Hibernate+Spring框架对系统的程序代码结构进行分层。分层的策略如下: 3.2 系统功能结构设计 根据网络在线考试系统的特点,可以将其分为前台和后台两个部分进行设计。前台主要用于https://blog.51cto.com/u_16075691/6995301