1. 系统通用能力的沉淀:a.核心模型的数据沉淀 b.通用服务能力的沉淀

    ps1:以前重心主要放在了业务的抽象和通过设计模式来增加可复用的扩展性。局限在于,抽象的范围会被单个业务或者当前的业务所束缚,在更大的范围内,也许所做的抽象就无法很好的起到它的作用。而通用能力的沉淀,在于每个业务项目都会帮助积累一些通用的能力,这些能力可以直接应用到其它的业务项目中,尤其是在一些业务发展前景不是很清晰,业务多样性比较高的场景。 更进一步,随着系统的通用能力的积累和规划,这些能力还会反过来影响和规范业务需求。 最后,所有的能力都有上下文限制,需要明确系统边界。

    ps2:通用能力的沉淀,必然导致数据模型的职能更单一,导致上层的一个业务含义的表达需要聚合很多数据模型,从而大大增加数据操作的复杂度。反过来,数据模型的单一职能,导致了对通用服务能力的依赖,否则一天天写mapper就写死了(这里的通用能力暗指的其实是对聚合操作的通用能力)。

  2. 多租户:数据隔离,业务规则可配置化

  3. 核心模型的重要性:模型的含义定位,模型的字段,模型之间的关系(聚合)。核心模型和通用能力的基石,对通用能力的影响和非常非常巨大的。根据模型聚合的边界划分,还可以分出不同的应用服务,人员组织架构等等。

  4. 系统包结构/模块划分: a. 三层架构(api,业务层,基础建设层(dao,wrapper,util...)) b.四层(api,业务层,领域层,基础建设层(dao,wrapper,util...)) c.根据系统职能的定位,在四层的基础上,对业务层进一步进行拆分(1.首先是业务层整体的划分:a.按照不同的业务 b.对业务流程的抽象 等进行划分等等。 2.然后是每个业务模块下,再可以建设该业务层下的通用层,业务流程抽象划分等等)

    难点:1.业务层的抽象和划分 2. 业务层内部的通用能力和领域层内的通用能力的界限(业务层的划分对这个影响很大)

  5. 系统交互:bc端分离(模型异构,bc端的业务区别大),。。。

  6. 以上的这些系统建设的知识是如何积累下来的呢? 理论+实践?看什么书呢?(领域驱动?企业系统架构?)

  7. 为什么在这个系统里,对设计模式的东西感知的很少?是因为业务层划分完之后,每个业务功能都变得太小?是因为业务本身的特点?

  8. 胡思乱想:设计模式的目的是帮助我们实现 高可复用的高可维护性。 通用能力的建设,实现了很高的复用性,而且这种核心的通用层一旦建立后很少会需要再去修改。功能的扩展也许因为 数据模型和它本身的单一职能 而变的没有那么高的要求。 再加上业务层进一步的通用化建设和划分得更小,导致了在这种情况下设计模式变得不是那么必要。 所以,设计模式在更加多变,复杂,细枝末节更多的业务层发挥的余地更大。

最近一个dish项目的建设思考的更多相关文章

  1. 如何快速高效地完成一个Android项目?

    本文的内容有别于之前文章中纯技术的探讨,会从业务逻辑.技术.团队和方法论的角度探讨如何快速高效地完成一个Android项目.当然,快速高效是有前提的,第一,本文依然是从研发的角度来谈如何把控项目的,而 ...

  2. 【简书】在阿里云自带的CentOS + LAMP环境下部署一个Laravel项目

    在阿里云自带的CentOS + LAMP环境下部署一个Laravel项目 作者 DonnieZero 关注 2017.07.29 22:02* 字数 2218 阅读 5556评论 3喜欢 1赞赏 1 ...

  3. 使用 GNU autotools 改造一个软件项目

    使用 GNU autotools 改造一个软件项目 及永刚 jungle@soforge.com 2006 年 3 月 24 日  版本:0.3 本文不是一篇规范的教程,而是用一个软件项目作为例子,演 ...

  4. 如何架构一个 React 项目?

    编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有 ...

  5. 一个web项目中web.xml<context-param>的作用

    转   <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置 ...

  6. MAVEN学习-第一个Maven项目的构建

    MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...

  7. 用Kotlin创建第一个Android项目(KAD 01)

    原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...

  8. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  9. 一个年轻的码农的一个C#项目

    话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...

随机推荐

  1. spring cloud Ribbon

    参考:https://www.jianshu.com/p/1bd66db5dc46 Ribbon 是什么 spring cloud ribbon 是一个基于HTTP 和 TCP 的客户端负载均衡工具, ...

  2. mongo中用嵌套结构优势是什么

    首先需要知道,MongoDB是NoSQL中的一种,是不直接支持Join的,这是NoSQL的一个特点,不需要直接支持Join,可以将横向扩展以及性能做到更好. 但是这不等于说MongoDB不能做Join ...

  3. LayUI左侧菜单无法保持选中状态

    1.问题描述:一般的左侧菜单都会是动态添加的模块,利用循环把模块名和链接地址逐个显示出来如下图 但是问题来了,只要点任何二级菜单就不会保持左侧菜单当前一级菜单和二级菜单选中状态. 2.分析原因:因为模 ...

  4. AD16PCB如何快速删除走线

    工具(Tools)取消布线(Un_Route)全部(AII) ad pcb画图,如果想整体去掉一条线,只要是连接在一起的,不管在哪一层,都可以采取如下方法:1.PCB画面下,按组合键Ctrl+H,会出 ...

  5. jquery全选的选中和取消选中

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. 10.17 elemen.js

    今天终于把element.js的官方文档看完了,主要是基础组件的用法,看的时候有种之前学bootstrap的感觉,似曾相识. 虽然它是基于VUE的,但是展示给我们的代码已经精简到不用会VUE也能看懂了 ...

  7. linux之systemd---学习

    linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化.内核初始化的最后一步就是启动 PID 为 1 的 init 进 ...

  8. ping不通公网ip时路由器设置

    可能是路由器里设置了wan口禁ping了 另外,NAT地址转换不要动,默认是开启的 主服务器上防火墙关掉或者设置好访问规则 默认的80端口是不能用的,需要设置一个其它的端口

  9. CSS3--2D&3D的使用

    transform 过渡属性 向元素进行2D或3D转换 transform-origin:该元素基于某个点来旋转  transform-style: preserve-3d 规定嵌套元素如何在3D空间 ...

  10. python爬虫工具集合

    python爬虫工具集合 大家一起来整理吧!强烈建议PR.这是初稿,总是有很多问题,而且考虑不全面,希望大家支持! 源文件 主要针对python3 常用库 urllib Urllib是python提供 ...