摘要:
上节我们提到Stream和List的主要分别是在于Stream的“延后计算“(lazy evaluation)特性。我们还讨论过在处理大规模排列数据集时,Stream可以一个一个把数据元素搬进内存并且可以逐个元素地进行处理操作。这让我不禁联想到我们常用的数据搜索读取方式了:大量的数据存放在数据库里, 阅读全文
摘要:
虽然明白泛函编程风格中最重要的就是对一个管子里的元素进行操作。这个管子就是这么一个东西:F[A],我们说F是一个针对元素A的高阶类型,其实F就是一个装载A类型元素的管子,A类型是相对低阶,或者说是基础的类型。泛函编程风格就是在F内部用对付A类的函数对里面的元素进行操作。但在之前现实编程中确总是没能真 阅读全文
摘要:
初接触泛函状态觉着很不习惯。主要是在使用State数据类型时很难理解其中的原理,特别是泛函状态变迁机制(state transition mechanism):怎么状态就起了变化,实在难以跟踪。我想这主要是因为状态变迁机制经过了函数组合,已经深深的埋藏在运行代码后面。上节我们讨论到RNG,对于了解S 阅读全文
摘要:
对于OOP程序员来说,泛函状态变迁(functional state transition)是一个陌生的课题。泛函状态变迁是通过泛函状态数据类型(functional state)来实现的。State是一个出现在泛函编程里的类型(type)。与其它数据类型一样,State同样需要自身的一套泛函操作函 阅读全文
摘要:
对OOP编程人员来说,泛函状态State是一种全新的数据类型。我们在上节做了些介绍,在这节我们讨论一下State类型的应用:用一个具体的例子来示范如何使用State类型。以下是这个例子的具体描述: 模拟一个自动糖果贩售机逻辑:贩售机有两种操作方法:投入硬币和扭动出糖旋钮。贩售机可以处于锁定和放开两种 阅读全文
摘要:
N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 领域层 应用层 基础设施层 网络和展现层 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度、提高代码复用率的技术。为了实现分层架构,ABP遵循领域驱动设计的原则。在领域驱动设计中有四个基本层 阅读全文
摘要:
介绍 介绍 快速示例 其他 启动模板 如何使用 介绍 我们通常会根据不同的需求来创建不同的应用程序。但是对于一些通用相似的结构总是一遍又一遍的实现,至少在某种程度上是这样的。常见的通用模块如授权、验证、异常处理、日志、本地化、数据库连接管理、设置管理、审计日志。同时,我们也在使用如分层、模块化架构, 阅读全文
摘要:
启动配置 配置ABP 替换内置服务 配置模块 创建模块配置 替换内置服务 ABP提供了基础设施和模型在启动的时候对它及模块进行配置。 配置ABP 在模块的PreInitialize事件中配置ABP。示例配置如下: public class SimpleTaskSystemModule : AbpMo 阅读全文
摘要:
ABP模块系统 介绍 模块定义 生命周期方法 PreInitialize Initialize PostInitialize Shutdown 模块依赖 插件系统 ASP.NET Core ASP.NET MVC,Web API 插件中的控制器 附加程序集 自定义模块系统 模块配置 模块声明周期 P 阅读全文
摘要:
设置管理 介绍 关于 ISettingStore 定义设置 设置范围 重写设置定义 获取设置值 服务端 客户端 更改设置 关于缓存 关于 ISettingStore 设置范围 重写设置定义 服务端 客户端 介绍 每个应用都需要存储设置,并且在应用的某些地方需要使用这些设置。ABP提供了一个强大的在服 阅读全文
摘要:
OWIN集成 安装 使用 如果在应用程序里既使用ASP.NET MVC也使用ASP.NET Web API,需要在工程里安装Abp.Owin包。 安装 添加Abp.Owin包到主工程里(一般是web工程)。 Install-Package Abp.Owin 使用 Install-Package Ab 阅读全文
摘要:
多租户 什么是多租户? 数据库和部署架构 多部署-多数据库 单部署-多数据库 单部署-单数据库 单部署-混合数据库 多部署-单/多/混合数据库 ABP的多租户 启用多租户 租主和租户 会话 决定当前租户 租户仓库 数据过滤器 IMustHaveTenant Interface IMayHaveTen 阅读全文
摘要:
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 客户端 客户端 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区。为了满足这样的需求和集中的时间操作,Abp提供了时间操作的通用基础设施。 时钟 Clocks是用来操作DateTime值的主要方法。它定义了 阅读全文
摘要:
对象到对象的映射 介绍 IObjectMapper接口 AutoMapper集成 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 单元测试 预定义映射 LocalizeableString->String 注入IMapper 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 阅读全文
摘要:
实体 实体类 聚合根类 领域事件 常规接口 审计 软删除 激活/失活实体 实体改变事件 IEntity接口 领域事件 审计 软删除 激活/失活实体 实体是DDD(领域驱动设计)的核心概念之一。Eric Evans描述它为"An object that is not fundamentally def 阅读全文
摘要:
仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 管理数据库连接 仓储生命周期 仓储最佳实践 自定义仓储接口 自定义仓储实现 查询 获取单个实体 获取 阅读全文
摘要:
值对象 介绍 值对象基类 最佳实践 介绍 "展现领域描述性层面且没有概念性身份的对象称之为值对象。"(Eric Evans)。 和实体相反,实体有身份标示(Id),值对象没有身份标示。如果两个实体的身份标示是不同的,那么就认为他们是不同的对象/实体,即使他们的所有属性都是一样的。考虑两个不同的人有相 阅读全文
摘要:
领域服务 介绍 IDomainService接口和DomainService类 示例 创建接口 服务实现 使用应用服务 一些探讨 为什么只有应用服务? 如何强制使用领域服务? 创建接口 服务实现 使用应用服务 为什么只有应用服务? 如何强制使用领域服务? 介绍 领域服务(或者在DDD中单纯的服务)用 阅读全文
摘要:
规约 介绍 示例 创建规范类 使用仓储规约 组合规约 讨论 什么时候使用? 什么时候不使用? 示例 什么时候使用? 什么时候不使用? 介绍 规约模式是一种特别的软件设计模式,通过使用布尔逻辑将业务规则链接起来重新调配业务规则。(维基百科)。 尤其是,它通常用来为实体或其他业务对象定义可复用的过滤器。 阅读全文
摘要:
工作单元 介绍 ABP中的连接和事务管理 传统的工作单元方法 控制工作单元 UnitOfWork特性 IUnitOfWorkManager 工作单元详情 禁用工作单元 无事务工作单元 一个工作单元方法调用另一个 工作单元范围 自动保存更改 IRepository.GetAll()方法 工作单元特性限 阅读全文