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. 如何在 Koa 中获取 client 的 ip 以及 port

    ctx.body.remoteAddress ctx.body.remotePort

  2. vim常用配置 vimrc文件

    自从接触vim,自己瞎鼓捣.vimrc也有一段时间了.收集记录一下好用的配置. 一.奇技淫巧 1.折叠代码 折叠代码常常用在代码块较长的情况下,比如一个文件里定义了很多个函数,或者注释.括号影响的阅读 ...

  3. Centos6安装和配置etcd3

    etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现.etcd 的灵感来自于 ZooKeeper 和 Doozer,侧重于: 简单:支持 curl 方式的用户 API ( ...

  4. C# 截取两个指定字符串中间的字符串列表

    /// <summary> /// 截取两个指定字符串中间的字符串列表(开始和结束两个字符串不能相同!) /// </summary> /// <param name=& ...

  5. scapy基础之一 ----简单命令

    前言 scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常被用到网络攻击和测试中.下面介绍简单命令. ls() List all availab ...

  6. php hook编程机制

    说明 hook,中文翻译为钩子,编程中的钩子类似我们现实中的钩子,需要挂在东西的时候    直接挂载到上面即可.程序中也是,需要运行的代码挂载到上面即可.         具体思想就是:在项目代码中, ...

  7. js 中格式化显示时间

    function getMyDateTime(str){ var oDate = new Date(str), oYear = oDate.getFullYear(), oMonth = oDate. ...

  8. 记一次win10+oracle11.2安装

    下载安装文件,地址:链接:https://pan.baidu.com/s/1gObmWv5_w2Y4Jlf2-RkBYA 密码:1rx9 安装手册参考:链接:https://pan.baidu.com ...

  9. vue全局API

    一.Vue.extend() 顾名思义  extend  继承,官方给出的解释是   (使用基础 Vue 构造器,创建一个“子类”.参数是一个包含组件选项的对象.) Vue构造器是指  vue是一个构 ...

  10. js 加减乘除以及四舍五入 新写法

    1 四舍五入 eg: (1.23).round() = 1.2 (1.2456).round(3) = 1.246 Number.prototype.round = function (count) ...