带着问题去思考,大家好!

前几天了解到EF Core的开发模式:DB First(数据库优先),Model First(模式优先),Code First(代码优先)。

我所接触的大多是DB First。如果大家了解的话,有些开源后台项目,基本都会有后两者,因为方便大家更快的去使用部署起来后台。

在建议的Layered ['leɪəd] Architecture [ˈɑːrkɪtektʃər]模式中,---表示层,业务层和数据层,其后Evans分析并引入两个关键变化。

一:将关注点放到layer上,而不是tier。layer是应用程序组件之间的逻辑分隔,而tier是物理上不同的应用程序和服务器。

二:识别的层数分为4各层-表示层-应用层-领域层和基础结构层

整体式应用程序

  我们都知道程序都是自底向下设计,我们都是围绕着数据模型来进行开发设计,其中的过程以及尤其依赖数据模型的用户界面和体验。

   在整体式应用程序中,数据从底部的持久化存储到前端,然后在返回。

  根据分层架构,我们都知道,从存储到前端以及从前端到存储。我们不应该考虑把应用程序堆栈分成两部分吗?独立处理命令堆栈和读堆栈对于开发是不是更加有效果呢?所以NOSql存储来了,使得经典的RDBMS系统开始支持XML和JSON。这也正式Command and Query Responsibility Segregation(CQRS)模式的使用。

以上是结合CQRS设计的分层架构模式

CQRS方法

CQRS不是万能的,重要的是他的思想。

  有经验的开发人员知道。创建一个理想的数据模型,使其能够将关系数据模型的原则和最终用户实际需要的视图的复杂性结合起来是很困难的。如果只有一个应用程序堆栈,就只能有一个面向持久化的数据模型,但是需要调整这个模型,使其能够有效的满足前端的需求。特别是与某种方法学(如领域驱动设计的额外的抽象层结合起来时),后端(业务逻辑和数据访问逻辑)的设计很容易变得一团乱。

  以上问题。CORS通过将设计问题分解为两个较小的问题,新应用程序架构设计解决问题,并不释施加外部约束,使设计变得更加简单。具有不同的堆栈的好处是,容易为实现名利和查询使用不同的对象模型。有必要,可以为命令使用一个完整的领域模型,为表示使用一个定制的普通的数据传输对象,可能这些对象从SQL查询具体化的,需要多个表示前端,只需要额外创建读模型。整体复杂度是个体复杂度的和,而不是笛卡尔积。

  1:不同的数据库

  分解成不同的堆栈有一些问题,两个堆栈同步问题,数据命令写入能够被一致地读回?根据自身业务,CQRS实现可以基于一种两种数据库,如果使用一个共享数据库,共享数据库确保了经典的ACID一致性,只需要在读堆栈中的普通查询做一些额外的工作。

  性能和扩展行,可以考虑为命令堆栈和读堆栈使用不同的持久化端点。

  

什么时候用CQRS?

这是一种模式,CQRS架构模式主要是被设计来解决高并发业务场景的性能问题。

基础结构层的构成

基础结构层是与使用具体的技术相关的所有东西,包括数据持久化O/RM框架(EF),外部的Web服务,特定的安全API,日志记录,跟踪,IOC容器,缓存等。最突出的是组件的持久化层,也就是数据访问层。

持久化层 缓存层 外部服务这些已经非常成熟,不在这里赘述。

EF Core-1的更多相关文章

  1. EF Core 数据库迁移(Migration)

    工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用  Pomelo.EntityFrameworkCore.MySql   源代码地址(https://github. ...

  2. Asp.net Core 通过 Ef Core 访问、管理Mysql

    本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...

  3. EF Core 杂记

    本系列文章,将介绍本人在学习和使用EF Core的过程中的收获与心得. 或许有的地方讲的错误 欢迎大家批评指出. 1.EF Core 数据库迁移(Migration)

  4. MySQL官方.NET Core驱动已出,支持EF Core

    千呼万唤始出来MySQL官方.NET Core驱动已出,支持EF Core. 昨天MySQL官方已经发布了.NET Core 驱动,目前还是预览版,不过功能已经可用. NuGet 地址:https:/ ...

  5. EF Core 1.0 和 SQLServer 2008 分页的问题

    EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...

  6. EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

    官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大 ...

  7. EF Core CodeFirst实践 ( 使用MS SqlServer)

    这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择  ASP.NET Core Web Application (.NET Core) ...

  8. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  9. ASP.NET Core 开发 - Entity Framework (EF) Core

    EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...

  10. 再谈EF Core内存数据库单元测试问题

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象& ...

随机推荐

  1. 2015-09-14-初级vector

    标准库vector类型 #include<vector> using std::vector; vector为一个类模板. vector的初始化 vector<T> v1; v ...

  2. js 实现排序算法 -- 归并排序(Merge Sort)

    原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得 ...

  3. C++输入带空格的字符串

    对于字符数组 1.使用 getline() 读入整行数据,回车键输入的换行符确定输入结尾. 调用方法:cin.getline(str, len) 第一个参数str用来存储输入行的数组名称,第二个参数是 ...

  4. eclipse、myeclipse使用常用的小技巧

    1.修改类名称上的@author  *** Preference----Java----Code Style----Code Templates----->Comments----->Ty ...

  5. python socket粘包及实例

    1.在linux中经常出现粘包的出现(因为两个send近靠着,造成接受到的数据是在一起的.)解决方法: 在服务端两send的中间中再添加一个recv(),客户端添加一个send(),服务端收到信息确认 ...

  6. OutputStream之flush() · 李大白写点儿啥

    最近在做一个网络下载功能,I/O操作时,操作完OutputStream时写了flush(),目的是刷新输出流,将缓存写入物理设备.突然就想,这里是否需要flush()呢? 我当时的代码: 1 2 3 ...

  7. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

  8. appium使用相对坐标定位元素

    最近在用appium做自动化时发现,有一些元素无法通过uiautomatorviewer进行定位,这样就只能通过相对坐标来进行定位了.但是,问题又来了:如何获取元素的坐标呢? 在网上找了半天也没找到相 ...

  9. 事务Transaction

    目录 为什么写这系列的文章 事务概念 ACID 并发事务导致的问题 脏读(Dirty Read) 非重复读(Nonrepeatable Read) 幻读(Phantom Reads) 丢失修改(Los ...

  10. Python爬虫-scrapyd

    1.什么是scrapyd Scrapyd是一个服务,用来运行scrapy爬虫的. 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫. 官方文档:http://scrapyd ...