最近一个dish项目的建设思考
系统通用能力的沉淀:a.核心模型的数据沉淀 b.通用服务能力的沉淀
ps1:以前重心主要放在了业务的抽象和通过设计模式来增加可复用的扩展性。局限在于,抽象的范围会被单个业务或者当前的业务所束缚,在更大的范围内,也许所做的抽象就无法很好的起到它的作用。而通用能力的沉淀,在于每个业务项目都会帮助积累一些通用的能力,这些能力可以直接应用到其它的业务项目中,尤其是在一些业务发展前景不是很清晰,业务多样性比较高的场景。 更进一步,随着系统的通用能力的积累和规划,这些能力还会反过来影响和规范业务需求。 最后,所有的能力都有上下文限制,需要明确系统边界。
ps2:通用能力的沉淀,必然导致数据模型的职能更单一,导致上层的一个业务含义的表达需要聚合很多数据模型,从而大大增加数据操作的复杂度。反过来,数据模型的单一职能,导致了对通用服务能力的依赖,否则一天天写mapper就写死了(这里的通用能力暗指的其实是对聚合操作的通用能力)。
多租户:数据隔离,业务规则可配置化
核心模型的重要性:模型的含义定位,模型的字段,模型之间的关系(聚合)。核心模型和通用能力的基石,对通用能力的影响和非常非常巨大的。根据模型聚合的边界划分,还可以分出不同的应用服务,人员组织架构等等。
系统包结构/模块划分: a. 三层架构(api,业务层,基础建设层(dao,wrapper,util...)) b.四层(api,业务层,领域层,基础建设层(dao,wrapper,util...)) c.根据系统职能的定位,在四层的基础上,对业务层进一步进行拆分(1.首先是业务层整体的划分:a.按照不同的业务 b.对业务流程的抽象 等进行划分等等。 2.然后是每个业务模块下,再可以建设该业务层下的通用层,业务流程抽象划分等等)
难点:1.业务层的抽象和划分 2. 业务层内部的通用能力和领域层内的通用能力的界限(业务层的划分对这个影响很大)
系统交互:bc端分离(模型异构,bc端的业务区别大),。。。
以上的这些系统建设的知识是如何积累下来的呢? 理论+实践?看什么书呢?(领域驱动?企业系统架构?)
为什么在这个系统里,对设计模式的东西感知的很少?是因为业务层划分完之后,每个业务功能都变得太小?是因为业务本身的特点?
胡思乱想:设计模式的目的是帮助我们实现 高可复用的高可维护性。 通用能力的建设,实现了很高的复用性,而且这种核心的通用层一旦建立后很少会需要再去修改。功能的扩展也许因为 数据模型和它本身的单一职能 而变的没有那么高的要求。 再加上业务层进一步的通用化建设和划分得更小,导致了在这种情况下设计模式变得不是那么必要。 所以,设计模式在更加多变,复杂,细枝末节更多的业务层发挥的余地更大。
最近一个dish项目的建设思考的更多相关文章
- 如何快速高效地完成一个Android项目?
本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑.技术.团队和方法论的角度探讨如何快速高效地完成一个Android项目.当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而 ...
- 【简书】在阿里云自带的CentOS + LAMP环境下部署一个Laravel项目
在阿里云自带的CentOS + LAMP环境下部署一个Laravel项目 作者 DonnieZero 关注 2017.07.29 22:02* 字数 2218 阅读 5556评论 3喜欢 1赞赏 1 ...
- 使用 GNU autotools 改造一个软件项目
使用 GNU autotools 改造一个软件项目 及永刚 jungle@soforge.com 2006 年 3 月 24 日 版本:0.3 本文不是一篇规范的教程,而是用一个软件项目作为例子,演 ...
- 如何架构一个 React 项目?
编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有 ...
- 一个web项目中web.xml<context-param>的作用
转 <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置 ...
- MAVEN学习-第一个Maven项目的构建
MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 一个年轻的码农的一个C#项目
话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...
随机推荐
- MongoDB基本语法
建立连接 client = pymongo.MongoClient() 新建数据库 db = client["db_name"] 新建表 tble=db["table_n ...
- scrapy 之自定义命令运行所有爬虫文件
1.在spider文件夹同级目录创建commands python包 2.在包下创建command.py文件 3.从scrapy.commands包下引入ScrapyCommand 4.创建一个类,继 ...
- Oracle导入建表的sql文件类型
- HttpSession原理及Session冲突
一.摘要 本文讨论了web服务器靠session id识别客户端.以及透过原理分析session冲突的原因,发现session冲突的原因是保存session id信息的cookie发生 ...
- Python 的xlutils模块
python模块: xlrd:读取excel xlwt:写入excel 缺点:excel格式无法复用 推荐xlutils模块 可复制原excel格式 from xlutils.copy import ...
- 记录一次程序输出和DB查询不匹配的问题
今天发生一件很神奇的事情,我用TP读取DB数据,然后打印出来的数据,和直接通过sequal pro查询出来的数据(某一列),怎么对都对不起来,我尝试 清空TP缓存 MYSQL服务重启 mac重启 都无 ...
- 更换Appsecrect应该要注意的问题
1. 有时候因为需要,有些地方需要填写Appsecrect, 但是大家都知道微信公众平台上这个值 即使你自己是管理员是看不到的,只能重置,但是重置后,一定要记住刷新AccessToken啊,不然就尴尬 ...
- js如何获取点击<li>标签里的内容值
路:为li对象添加单击事件→事件触发后利用innerHTML获取li的文本.实例演示如下: 1.HTML结构 <ul id="test"> <li>Glen ...
- Flask 验证码 点击验证码刷新
---恢复内容开始--- import random import string # Image:一个画布 # ImageDraw:一个画笔 # ImageFont:画笔的字体 # pip insta ...
- Servlet之过滤器(Filter)
一.概述 Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看.提取或以某种方式操作正在客户机和服务器之间交换的数据.这些组件通过一个配置文件来声明,并动态地处理,当在web.x ...