最近一个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#项目
话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...
随机推荐
- 初步了解Spring
1.了解“控制反转” 控制反转也称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度. 下面是一个最简单的打印机实例 纸张接口,纸张有大小 继承它的有两个类,两种纸张大小的类 A ...
- 【Spring学习】Spring的源码解析之路
缘起:=====>>>> 在项目中实际上是用到了Spring的内容,只是直接用的SpringBoot,不管是Eclipse中还是在Intellig IDEA中,应该都比较容易能 ...
- mysql权限操作(转)
慢慢看吧mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: grant 权限 on 数据库对象 to ...
- python基础(16)私有类,类,类变量
1.私有类: class My: def test(self): self.__password = 123456 def say(self): print('password',self.__pas ...
- Oracle语言环境变量配置
创建系统环境变量,以下为GBK和UTF8两种模式: 变量名:NLS_LANG变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 变量名:NLS_LANG变量值:SIMPLIFI ...
- CentOS-07安装Redis学习笔记
CentOS-07安装Redis 下载 http://download.redis.io/releases/redis-3.0.0.tar.gz 安装第一步:将下载的Redis源码包上传大奥Linux ...
- 18-matlab知识点复习一
clc; clear; %% 输出 clc, clear; fprintf('%.19f', pi); fprintf('%d', 110); inf pi disp([1,3,5]) disp('a ...
- pg_dump 数据处理
从数据库导出数据 -U 用户 -p 端口 -h 主机地址 -f 导出文件地址 -O 备份数据库结构和数据,不设置拥有者 -s 只导出数据库结构 最后是库名 (全部导出)pg_dump -U post ...
- google搜索引擎正确打开姿势
Google搜索引擎 原文来自黑白之道微信公众号 https://mp.weixin.qq.com/s/Ey_ODP_mG00of5DPwcQtfg 这里之所以要介绍google搜索引 ...
- 【aardio】如何对listview中某一列,某一行的特定值进行修改?
用表格创建数组来实现. import win.ui; /*DSG{{*/ var winform = ..win.form( bottom=399;parent=...;right=599;text= ...