- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
功能框架、业务流程、业务操作和信息结构都是针对功能设计展开的,这四个要素是业务设计的核心内容。
推荐的设计方法是:先完成功能框架(用例驱动),再依次完成业务流程、业务操作和信息结构。然而这种设计方法并不绝对,需要具体问题具体分析。
业务设计的起点有三种。
先梳理业务用例,该方法适合中型系统。
先梳理业务流程,该方法适合中小型系统。
先梳理业务的信息结构,该方法适合梳理行业系统。
先通过划分出目标层用例、步骤层用例等手段,拆分出功能模块,然后再针对每个模块,进一步梳理出业务流程、业务操作和信息结构等内容。
我们定义目标层用例就是在梳理公司的业务,然后再以业务为单元,梳理步骤层用例,随后将步骤层用例合并,从而完成功能单元的划分。
这个思路是层层递进的,非常合理。这样,不可能遗漏业务模块。
对于一项简单的业务,如用户下单、餐厅排队等业务,可以先梳理业务流程,而不是先梳理业务用例。这样做的好处是,在一开始就能抓住业务主线,并保证业务主线设计的合理性。然后再以此为基础,拆分出目标用例(业务目标)、业务操作和信息结构等。
例如,餐厅排队系统就是先处理出排队流程,然后又拆解出领号、叫号、领位和查号等业务目标,最后再梳理桌台和订单的信息结构。
该方法的好处是,梳理业务的过程很自然。通过梳理流程就能很自然地梳理出业务逻辑。如果一上来就问有哪些业务模块,则对方不一定能说出。
该方法可进行静态的业务设计和软件架构,其核心思想是先梳理信息结构(类图)和业务规则,再梳理业务的用例、流程和操作等内容。
我们说张三是通信领域的专家,李四是导弹领域的专家,他们都拥有各自领域的知识。所谓领域驱动设计,就是以梳理行业知识为出发点,进而构建出完整的业务。这些行业知识主要是信息结构、行业规则等内容。反而业务流程、业务目标等变成次要信息了。领域内容的梳理决定了软件的体系架构,而业务流程、业务目标等,不过是这个基础上的业务实现而已。
领域驱动设计要先梳理信息结构,这特别适合在复杂系统中,尤其适合用在 Saas 软件中,如行业用的财务系统、人力服务系统、餐饮系统等。该方法可确保软件具有较强的可扩展性,从而适应不同企业的不同需求,避免软件的重复开发和反复修改。
案例一:用户和组织结构
D 公司是人力外包公司,早期采用敏捷开发,并不重视信息结构的梳理。但是随着业务的发展,其业务越来越多,软件无法支撑未来业务的发展。比如,几个系统的用户信息并不一致,有的以手机号区别用户,有的以用户 ID 区别用户。当需要将不同账号信息汇总展示时,该公司就面临困难。
另外,该公司的订单和服务模式也很复杂。该公司可以和其个集团公司签订合同,并由集团公司支付服务款项,但是落实的服务对象可能是集团公司下属事业部或分公司,也可能是一个完全独立的公司。D 公司需要对各个组织单独服务,但集团公司还要求能看到各个组织的信息,或进行一定的权限设置。然而,该业务开始没有考虑到这些,导致设计的数据库需要大改。
案例二:收费和业务需求
R 公司是给餐饮、零售企业做软件的公司,提供的业务众多,面对的公司类型也众多。比如,运营人员提出几个模块可单独收费,也可组合收费,并且有预付费等多种收费模式,但是该系统不具有可扩展性。再如,某集团公司要求把集团公司下的某品牌单独拆出,进行独立运营和核算,但该系统无法满足此需求。
造成以上问题的原因,一方面是,研发人员在搭建数据库的时候没考虑其扩展性,另一方面是,产品经理没说清楚需求,即没说清楚业务模型、权限要求、服务要求等。如果产品经理想写出让研发人员不返工的产品需求文档,则必须保证信息结构设计正确、有足够的可扩展性、能灵活应对业务需求,这些都可用类图进行梳理。
综上所述,领域驱动设计特别适合应对复杂行业,尤其是灵活多变的行业需求。而在开发此类软件的公司,通常拥有深厚的行业背景,并能引领行业管理的发展。在这里,软件公司不仅是软件的制造者,也是行业管理的引领者。
如果行业业务目标多,就从用例驱动设计开始,用例驱动设计通常适合中型系统。
如果业务较为简单,就从流程驱动设计开始,流程驱动设计通常适合中小系统。
如果业务信息结构复杂,需要灵活扩展,就从领域驱动设计开始,领域驱动设计通常适合行业系统。
当不好确定哪种方法优时,三种方法可都做一下,看看哪种方法更容易理清业务,就从哪种方法开始。
我有以下几行代码: using XXX.PAD.PaidServices; using YYY= XXX.PAD.PaidServices.Judet; //// uncomment below fo
我正在寻找一种方法,让 LAN 中的客户端无需任何配置即可找到我的服务器应用程序的所有实例。我不想自己破解某些东西,而是想使用现有的解决方案。就个人而言,我需要用 Python 完成它,但我很乐意听到
我的“问题”或“挑战”有很多问题。但它们都不符合我的需求。好的,我开始了: 我想要一个保存可变属性的数据库。现在我将它们作为列名“硬编码”到数据库中(参见图片)。请参阅“颜色”和“尺寸”。但是如果我想
我正在为我的一个 friend 创建一个网站。我们得到了这些布局,我已经放了一个灵活的背景,可以缩放到当前的浏览器大小。但是放置在背景上的图标需要在缩放窗口时保持相对位置。意味着如果我调整窗口大小,让
案例 通常,您会使用 cellForRowAtIndexPath 委托(delegate)方法来设置单元格。单元格的信息集对于单元格的绘制方式和大小非常重要。 不幸的是,heightForRowAtI
我试图让下面的 div 变得灵活 div { min-width: 500px; max-width: 1000px; width:100%; height: 400px; margin-left:1
我在单元测试方面遇到问题。当我运行测试时,它以 "No tests found" 结束。我正在使用 AppCode 和 Quick/Nimble 框架进行单元测试,但它在 XCode 中也不起作用。
问之前,请理解我的英语不好。 我在 servlet 编程中使用 Class.forName(...) 类。当我访问 servlet 时,我从数据库中获得一行详细的 Controller 信息,指示要使
我创建了一个cron job在 GAE 灵活环境中,每 15 分钟自动运行一次。 但是在创建每个实例时,是否会为每个实例复制相同的 cron 作业?我对此不太确定。 最佳答案 不,不会为每个实例复制
div A 灵活且固定(位于窗口顶部),具有高 z-index,因此下方的元素可以在滚动时从下方通过。 div B 位于 div A 下方,我希望它“粘”在 div A 的底部,因为在调整窗口大小时高
我是 Quick/Nimble 的新手,所以我尝试了一个简单的单元测试: import Quick import Nimble class DarkSkyTests: QuickSpec {
我创建了一个演示。关于表格单元格的灵 active ,我需要一些帮助。 我有一些表格单元格,它们的宽度应该是固定的。 但单元格由标签组成,标签可以是长文本,也可以是短文本。 基于此标签,表格单元格应该
我非常熟悉在代码中需要“水平带”的网站 - 即使他们的内容固定在 960 像素以内,他们的背景也会向左和向右“延伸”。 我知道如何做这些,如果它们只有一种颜色,或者我可以用作背景的一张图片。 最近一位
我在自己编写的网站(无框架或 CMS)上使用 Cloudflare Flexible SSL。一切正常,现在我想在整个网站上使用 HTTPS。我在 Apache Web 服务器上使用 PHP。 我想知
我有这个 Java 接口(interface): public interface Box { public void open(); public void close(); } 这个接
所以我有一个“主要”功能系统,现在可以作为 CMS 使用:用户进入编辑器并从四个模板中选择一个。在模板中,他们单击可以添加图像、文本或两者的部分。 我有一个预览屏幕,可以向他们展示他们正在制作的东西,
下面的 HTML/CSS/Javascript (jQuery) 代码显示了 #makes 选择框。选择一个选项会显示带有相关选项的 #models 选择框。 #makes 选择框偏离中心,#mode
我正在使用固定高度的图像来填充具有渐变颜色的 div,方法如下:背景:透明 url(green_bg.gif) repeat-x scroll 0 0; 但是它只填充一个等于图像高度的高度。根据其中的
我的系统的 GUI 在 1366 X 768 分辨率下运行良好。当它以不同的分辨率显示时,我需要并排滚动,而它不应该这样。此外,当我尝试在 chrome 中按 ctr+- 时,div 和部分变得困惑。
我正在尝试在 google app engine 灵活环境中使用 python 编写日志。 我想使用默认的 python 日志记录库并使用处理程序进行日志记录。这是我的代码: import loggi
我是一名优秀的程序员,十分优秀!