业务行为的分析和设计

业务行为的分析和设计

       Author:Anders小明       
      

复杂业务行为通常看作是复杂规则与流程的集合。解决的基本方法依赖基本的思考方式:分解结构。
分解的第一要素是:面向对象——内聚。通常面向对象理论会告诉我们设计的设计原则是:这个对象是什么。这样的做法对于 Domain Model或者比较适合,但对应于Service或者Application层的对象并不合适。这一类对象在需求的上的描述最典型是过程式!过程式描述的最大特点是告诉我们怎么做,当我们应用面向对象设计时,相对于怎么做,我们要关心的是需求做什么。
1.1 分解行为的是所有工作的第一步:
分解的过程(手段),可以简单说有两个层次:
第一层:把逻辑分解到不同继承体系的对象上;
第二层:把逻辑分解到同一继承体系的对象的不同抽象层次上。
两个层次(手段)的内在的理论是: 做什么其实是一种行为抽象,而正如我们所知的,抽象是有层次和排列的。第一层分解在于解决顶层抽象,而第二层就解决其下层的抽象,如此反复,就可以完成整个逻辑抽象的排列。
不过,有时我宁愿用另外一种更实战的说法来解释这样的做法:利用面向对象方法,关注于 做什么来确定抽象模型,而把 怎么做分解为抽象模型的派生类型。
无论是做什么,还是怎么做,需要注意的一点是:在知识级上隐式概念的印射,在操作级上有其投影。
接下来我们面临其它一些技术问题。
1.2 确定逻辑的组合操作关系
在分解行为的过程中,我们先分解出了不同的对象体系,在知识级别(分析层次)上看,工作已经完成,不过在操作级别(设计层次)上看,我们还需要解决一个问题。
不同的对象体系在系统中,根据场景,表现为两种角色:调用者和被调用者。由于被调用者的派生体系(不同的怎么做),调用者面临着一个选择,选择一个或者一组合适的被调用对象。
如何选择有两种方式:设计时(部署时)和运行时确定。
设计时(部署时)很简单,在程序中写上特定派生类型,基本算是 hardcode。通常发生在调用方其对象体系的叶子节点直接调用被调用方的叶子节点。此时,调用者是被动选择,交给所有的被调用者(通常是叶子节点),每个被调用者采取合适逻辑操作组合。
另一种是运行时,是调用者主动选择(通过一个工厂),根据一定规则,判断选取合适的一个或者一组 action执行。通常利用外部如数据库,或者工厂+反射,利用对应被调用者的Specification来确定。
主动选择可以是简单的 if…else…来完成,当选择的影响因素多后可以采用的方式是决策表。
两者比较:

矩阵 / 决策表
面向对象方式
优点:
直接了当,信息获取明确;
随相关因素的增长,维护的复杂度曲线平缓升高,低于矩阵,决策表;在与,或,非计算上相对明确;层次化结构有助于学习;
缺点:
随相关因素的增长,维护的复杂度曲线快速升高;但在与,或,非计算上不明确;
相关信息获取不十分明确;
本质:
排列组合的平面化结构。这是其优缺点的根源;
排列组合的层次化结构;
开发:
运行时确定,变更相关因素对于开发有重大影响;
转化为部署时确定,运行时结构明确

在维护成本考虑,应该考虑多态,系统设计上不一定用面向对象编程实现,但在流程和计算设计上至少要模拟面向对象的方式;
1.3 行为下的规则
分解后的行为,除了处理怎么做的流程,还有各种各样的规则:包括了 Selection的Specification外,还包括Validation的Specification,Build的Specification以及Calculation的Specification。
除了后两种是行为外(不包括它们参数的来源),其它两种业务规则本身来说,其有三种实现方式:
a)         多态(面向对象方式)。
b)      简单决策表(映射表),用显示的行表( and 关系)保存路由选择(运行时确定)。
c)       树形决策表(映射表),用显示的树表( and/or 关系)保存路由选择(运行时确定)。
1.4. 行为的异步分解
大部分行为的分解,都是同步的!然而在复杂系统中还是存在行为的异步分解,这样设计看起来更像是 Data Flow Pattern ,存在的理由不一,有的是出于性能原因,有的出于业务原因(在金融系统中可以看到这样的例子,例如:为了保证关键业务数据的存在,通常是一些价格或者利率,白天提请的交易行为,分为两步,第一步即使完成,而第二步动作必须在晚上进行)。
软件设计不是CRUD(12):低耦合模块设计理论——业务抽象:模块分层操作 对系统中的模块分层原则和分层规划方式进行了详细描述,并使用了一个仓储管理场景演示了如何进行模块分层规划。完成了模块分层规划后,我们就可以基于前期已经提取的业务维度,以及这个刚完成的模块分层规划,进行模型抽象工作和行为抽象工作了。实际上本文在讲解分层规划方式时,已经讲解了一些模型和行为的设计要点,例如讲解了业务主体、业务主体的关联信息以及业务主体和行为的对应方式。 阅读详情

相关推荐

【论文】基于Hadoop的电商用户行为分析系统设计与实现

本文围绕电商用户行为分析展开研究,设计并实现了一个基于Hadoop的用户行为分析系统。首先,分析了当前电商行业面临的挑战和需求,并界定了本系统的目标和功能。其次,详细介绍了系统的整体架构和各个模块的设计。系统主要包括数据采集模块、数据清洗和预处理模块、数据存储和管理模块、数据分析和挖掘模块以及结果可视化展示模块。其中,数据采集模块利用网络爬虫技术抓取用户行为数据,数据清洗和预处理模块对采集到的数据进行去重、过滤和格式转换等处理,数据存储和管理模块使用Hadoop分布式文件系统(HDFS)存储数据,并利用Ha

qq_36463299的博客 2039

第6章、业务分析方法(4)

CDA一级笔记(场景指标-业务行为分析类指标/效果分析类指标)

跨界小白 458

《基于kafka的网络用户行为分析系统设计与实现》开题报告

 随着互联网技术的飞速发展和网络应用的广泛普及,网络用户行为数据已成为企业理解用户需求、优化产品体验、制定营销策略的重要依据。然而,面对海量、高速、多样的用户行为数据,如何高效地收集、处理和分析,挖掘出有价值的信息和模式,成为当前互联网企业和研究机构亟待解决的问题。Kafka作为一种高性能的分布式消息系统,以其高吞吐量、低延迟、高可扩展性和容错性等特点,成为处理大规模实时数据流的理想选择。

m0_69704149的博客 1162

用户行为分析需求规格说明书

1、业务痛点略.2、指标解读2.1 H5应用 (累计)登录次数 以用户的会话次数来衡量,同一个用户一天可能发起多次会话,一次会话对应一次登录次数 (累计)注册人数 (累计)访问人数 (累计)访问次数 性别分布 消费者编好 访问时间分布 前十地域属性 年龄段分布 访问时间 用户名 账号名 渠道 停留时长 离开页面 访问页数 是否登录 人均访问时长 人均访问页面 访问次数 访问次数占比 访问人数 访问

Memory of Mr.Snail 4933

基于业务场景与用户行为,如何设计更友好的表单?

我们每天都会接触到各式各样的表单页面,其中包括登录账号、填写单据、购买产品、发布信息等。它作为所有产品里最常见也最普通的设计元素,往往最容易被忽略它们该有的体验细节,而引起用户使用中的挫败感。 本篇文章主要通过业务场景和用户行为的角度来分析,如何打造体验友好的表单界面。 目录 一、交互设计下的业务场景与用户行为 二、基于业务场景选择适合的布局模式 三、基于用户信任行为的设计原则 四、总结 交互设计...

盼盼学士 917

用户行为分析(页面鼠标跟踪行为示例)

用户行为分析(页面鼠标跟踪行为示例),运行Test.html

用户行为分析数据库设计

详见下图:

小浩子的博客 9514

基于Hadoop用户行为分析系统设计与实现.caj

本文的主要工作如下: 研究幵发高速网络数据包捕获系统。 研究幵发大数据环境下的分布式存储系统。 研究数据包的重组方法。对数据包进行重组,进而提取应用层内容。 设计并实现了基于的用户行为分析算法,并将该算法运用于用户行为分析中,实现海量数据的离线分析。 通过语言建立分析可视化平台。展现了用户行为分析及分类的结果,包括用户流量统计、用户分布、网站排行、关注热点等等,图表化的方法使得表现展现形式更为丰富直观。

如何分析业务需求

1 业务需求是什么? 设计功能的最根本动机和阶段性成果,也就是“业务目的”和“业务目标”,举个例子,设计朋友圈就是一个“业务需求”(当然也是解决方案),这个需求的业务目的就是“通过发布的动态连接用户”,业务目标就是“查看朋友圈的次数增多、发布朋友圈动态的次数增加”等。 业务需求 = 业务目的 + 业务目标 2 业务目的和业务目标的区别? 目的和目标的区别...

lukabruce的博客 5232

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 434

Langchain4j 文档处理实战:从加载到分割的完整流程解析

本文详细解析了使用Langchain4j进行文档处理的完整流程,涵盖从文档加载、解析到分割的核心步骤。通过实战代码示例,重点介绍了如何利用文档分割器将大文档切割为适合大语言模型处理的片段,并提供了参数调优与避坑指南,帮助Java开发者高效构建AI应用的数据处理基础。

smartcontract5的博客 542

业务的设计与分解

   复杂业务行为通常看作是复杂规则与流程的集合。解决的基本方法依赖基本的思考方式:分解结构。        分解的第一要素是:面向对象——内聚。通常面向对象理论会告诉我们设计的设计原则是:这个对象是什么。这样的做法对于Domain Model或者比较适合,但对应于Service或者Application层的对象并不合适。这一类对象在需求的上的描述最典型是过程式!过程式描述的最大特点是告诉我们怎么...

王贺的博客 208

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

设计vue业务组件

本文详细记录了设计优质vue组件的过程,分为基本原则、分解ui结构、行为角度、总结四个方面。希望对你有所帮助!

loverdany的博客 1447

一、qt下载与安装

qt与qtcreator 的区别与联系 1、QT Creator只是一个集成的编译器,用于将源代码编译成可执行程序。 QT 是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。 2、Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。 QT Creator 跨平台的 Qt IDE,Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集 ...

yiye_pianzhou的博客 2218

Spring Boot 调用豆包大模型如何开启联网搜索?

场景推荐方案有权限创建 Bot + 需强集成✅ 使用bot-xxxx无 Bot 权限 / 追求通用性✅ 自行集成搜索引擎 + 普通豆包模型仅需基础对话❌ 无需考虑联网豆包大模型确实支持联网搜索,但前提是:你用的是“智能体 Bot”,且它被配置了“网页搜索”插件,并调用正确的 API 端点。希望本文能帮你少走弯路,快速构建出真正“知天下事”的智能助手!

lpfasd123的博客 1124

电商 APP 设计的用户行为分析与界面优化

在移动互联网蓬勃发展的当下,电商 APP 已成为人们购物的重要平台。为了在激烈的市场竞争中脱颖而出,电商 APP 开发者与设计师需深入了解用户行为,并据此优化界面设计。用户行为分析为界面优化提供了科学依据,合理的界面设计又能有效引导用户行为,促进电商业务的增长。

2401_82617164的博客 1516

NX二次开发新建组件

NXOpen新建组件

qq_39541524的博客 329

用好数据分析方法挖掘数据意义形成业务洞察——下篇

通过选择合适的归因模型,可以分析用户行为、发现关键节点和用户需求,为运营策略提供有力支持。通过观察单个用户行为序列观察,深入了解用户对产品或服务的兴趣程度、依赖程度、使用频率等,帮助企业判断用户的真实需求和意图,进而优化产品和服务,提高用户转化率和满意度。用户画像通过标识和标签将用户分成不同群体,以便对不同群体进行差异化的产品和运营操作,以便提高产品和服务的质量和用户体验,是企业数据驱动的产品运营策略的重要组成部分。从现有用户中找到“真正的用户”,然后用这些用户的特征集合,最后按此特征找到类似的新用户。

2401_83179994的博客 871

模拟一个基站和一个移动台之间的信号传播

同样使用时间序列和上述参数计算出反射径信号的信号强度。根据时间序列和上述参数,计算出直射径信号的信号强度。该信号被视为一个简单的正弦波信号,其频率是2Hz。:时间序列,从0.1秒开始,每隔0.0001秒采样一次,直到12秒。:设置坐标轴范围,横轴范围为0到12秒,纵轴范围为-0.5到0.5。:移动台移动的速度。:移动台距离基站的初始距离。:基站到反射墙的距离。假设基站到反射墙的距离为15米。:绘制直射径信号、反射径信号和合成信号的波形图。:添加标签,标注每条曲线对应的含义。表示反射径信号的颜色为绿色,

Fanjufei的博客 291

PGM-Explainer实验总结

PGM-Explainer建立了一个概率图模型,为GNN提供实例级解释。 论文标题:PGM-Explainer: Probabilistic Graphical Model Explanations for Graph Neural Networks 论文地址:2010.05788.pdf (arxiv.org) PGM-Explainer实验 实验目的 研究PGM-Explainer的有效性 实验方案 合成数据集的节点分类 与其他解释器做对比实验 使用六个合成数据集。 每个输入图都是一个

笔记|思路|总结 1万+

CDA-LEVEL1-PART 6 业务数据分析(30%)

数据驱动型业务管理方法(占比3%) 熟知数据从业务中来到业务中去的全过程 熟知数据驱动型业务管理的价值意义 熟知数据驱动型业务管理流程 熟知数据驱动型业务管理思维方式 能够通过数据驱动型业务管理流程找到业务分析与业务管理需求的结合点,能够正确理解数据的出处及产生逻辑,能够正确的运用数据为业务管理提供有价值的数据分析结果 指标的应用与设计(占比12%) 指标的作用 熟知从指标结果出发到业务行为落地的思维过程及分析方法 熟知指标与透视计算间关系 熟知常用指标: ..

lovebird_27的专栏 1784

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

django基于Python的电商用户行为分析系统设计实现

Django基于Python的电商用户行为分析系统通常涉及前端、后端、数据库、数据分析及可视化等多个模块。

2501_93250029的博客 1097

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

我们应当怎样做需求分析:业务领域分析

在需求分析工作中,最后一项分析工作就是业务领域分析啦。业务领域分析,就是对需求分析中涉及到的业务实体,以及它们相互之间关联关系的分析。前面我们谈到了功能角色分析,或者说用例分析,它是从整体的角度对整个系统人机交互的分析与整理。随后我们谈到了业务流程分析,它是在对系统人机交互的分析与整理的基础上,更加细致的去分析和整理那些业务流程,以及组成这些流程的一个个业务操作。业务流程分析是对系统进行的一种动态...

充满诗意的联盟 744

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 讨论一把:由一个简单的OOP的例子所想到的
下一篇: 业务行为的分析和设计
林仪明
博客等级 码龄25年 313粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值