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. C#使用File.Create()创建文件后资源被占用

    由于文件被占用不能读写,所以报错“另一个程序正在使用此文件进程无法访问” 解决方法是在创建文件后立即Dispose掉 File.Create(path).Dispose();

  2. yii2-redis 扩展详解

    安装yii2-redis composer require yiisoft/yii2-redis 修改config/web.php 的  components 配置 'cache' => [ / ...

  3. Makefile 命令解析

    1.$(patsubst %.c,%.o, a.c b.c) 把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o” 2.$(VAR:A=B) 对于一个已经定义 ...

  4. 从零开始学spring cloud(九) -------- 超时机制,断路器模式介绍

    目前存在的问题: 现在我们假设一下,服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到服务返回.在高负载场景下,如果不做任何处理,这种问题很可能造成所有处理用户请求的线程都被耗竭,而 ...

  5. Oracle中number(5,-2)数据类型

    举个例子,1234.345 如果为number(5,-2),那么结果为 1200, 如果为number(5,2),那么结果为 1234.35 如果为number(5),那么结果为 1234 说明: N ...

  6. 《AlwaysRun!》第一次作业:团队亮相

    项目 内容 这个作业属于哪个课程 2016级软件工程(西北师范大学) 这个作业的要求在哪里 实验五  团队作业1:软件研发团队组建 团队名称 Always Run! 作业学习目标 熟悉软件的开发流程与 ...

  7. python3 电脑说话

    #coding:utf-8 import win32com.client spk = win32com.client.Dispatch("SAPI.SpVoice") spk.Sp ...

  8. c#devexpress 窗体控件dock的重要

    在设计c# devexpress winform 窗体时, 要建立起dock意识, dock就是子窗体如何靠在父窗体上, 有fill 全覆盖, buttom 底部,top 上部... 如下图 pane ...

  9. 在MyEclipse中搭建spring-boot+mybatis+freemarker框架

    一.创建项目 1.右键-->New-->Project... 2.选中Maven Project,点击next 3.选中第一个 4.添写Group Id,Artifact Id,选择Com ...

  10. 一、selenium 环境搭建

    本教程演示是在window系统上演示,linux.mac 系统以后会更新. 1.准备工作 1.python2或者python3安装包,官网:https://www.python.org/downloa ...