回到目录

再论Domain与Infrastructure

在面向领域的设计中,领域层(Domain)实现上是位于最底层的,其它层有对它的引用,包括基础设施层(Infrastructure)也是去引用领域层的,我认为,这是对的,事实上,在Domain中会规定如何去进行数据持久化的操作,包括方法名,方法签名等等,而采用哪种架构去实现这种持久化的方法则是Infrastructure层需要做的,这种设计绝对是把领域,业务放在第一位的,完全符合Eric 的DDD。

Domain.Core Layer & Domain Layer

我们在进行软件设计时,一个习惯就是把仅供代码抽象出来,这是对的,也是符合标准的,对于domain层我们会把与具体领域无关的代码抽象成一个domain.core,这个项目位于整个DDD解决方案的最底层,而具体的domain则会引入它,看一下我们的DDD中的domain层

aaarticlea/png;base64,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" alt="" />

domain.core中有数据持久化的规范,规约实现Specification及一些公用的功能代码。

aaarticlea/png;base64,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" alt="" />

具体的domain项目中包括三部分内容,具体业务规范(如产品业务规范Products),数据模型POCO实体,用于网络传输的DTO实体(这部分可以单拿出来,本例直接放在了实体层),我们先来看一下products这个业务规范:

IProductRepository:它是产品实体的数据持久化规范,Infrastructure层会去实现它,这里不会关心Infrastructure是采用linq to sql还是ef,我只规定要做什么,至少怎么去做,由Infrastructure自己去决定!

  public interface IProductRepository : IExtensionRepository<Product>
{
/// <summary>
/// 获取产品列表
/// </summary>
/// <returns></returns>
IQueryable<Product> GetProduct(); /// <summary>
/// 建立产品
/// </summary>
void AddProduct(Product entity); /// <summary>
/// 修改产品
/// </summary>
void ModifyProduct(System.Linq.Expressions.Expression<Action<Product>> entity);
}

ProductSpecification:这是一个与业务息息相关的规约类,它会根据具体业务去设计每一个业务的具体规约
 

  /// <summary>
/// 通过用户信息得到他的订单列表
/// </summary>
public class ProductSpecification : Specification<Product>
{
string _productName = default(string);
public ProductSpecification(string productName)
{
_productName = productName;
}
public override Expression<Func<Product, bool>> SatisfiedBy()
{
Specification<Product> spec = new TrueSpecification<Product>();
if (string.IsNullOrWhiteSpace(_productName))
spec &= new DirectSpecification<Product>(o => o.ProductName.Contains(_productName));
return spec.SatisfiedBy();
}
}

网络传输对象DTO,它是在进行WEB通讯时为了减少网站负载,而提出的新的实体层,将与本服务有关的实体属性提出,形成一个新的实体,这在SOA服务

中用的比较多。

  [DataContract]
public class ProductDTO
{
[DataMember]
[DisplayName("商品ID")]
public int ProductID { get; set; }
[DataMember]
[DisplayName("商品名称")]
public string ProductName { get; set; }
[DataMember]
[DisplayName("建立日期")]
public System.DateTime CreateDate { get; set; }
[DataMember]
public int SaleCount { get; set; }
[DataMember]
public Nullable<int> ClickCount { get; set; }
[DataMember]
[DisplayName("产品描述")]
public string Info { get; set; }
[DataMember]
public int UserID { get; set; }
[DataMember]
[DisplayName("销售价格")]
public decimal SalePrice { get; set; }
[DataMember]
[DisplayName("折扣")]
public int Discount { get; set; }
}

数据模型EDMX,这种模块我们称为entity frameworks模型,也叫EF模型,它可以把物理数据库映射到EDMX文件中,它是以XML形式保存的,而我们

的POCO简单数据实体也可以由工具自动生成,这些实体与原始数据表一一对应。ef poco 模型实体采用partial class方便开发人员以后对实体类进行扩展。

  public partial class Product
{
public Product()
{
this.ProductDetail = new HashSet<ProductDetail>();
} public int ProductID { get; set; }
public string ProductName { get; set; }
public System.DateTime CreateDate { get; set; }
public int SaleCount { get; set; }
public Nullable<int> ClickCount { get; set; }
public string Info { get; set; }
public int UserID { get; set; }
public decimal SalePrice { get; set; }
public int Discount { get; set; }
public System.DateTime UpdateDate { get; set; } public virtual User_Info User_Info { get; set; }
public virtual ICollection<ProductDetail> ProductDetail { get; set; }
}

最后,我们看一个domain与Infrastructure之间的数据通信,它们一般使用IOC容器进行实现,像AutofacUnity都是不错的选择,而unity是一个强大的工具

集,它不仅包括IOC的功能,而且还提供了对AOP的实现!下次我们将着重介绍一下Unity在DDD中的使用,介请期待!

回到目录

DDD~领域层的更多相关文章

  1. C#进阶系列——DDD领域驱动设计初探(七):Web层的搭建

    前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...

  2. DDD领域驱动设计之领域基础设施层

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 其实这里说的基础设施层只是领域层的一些接口和基类而已,没有其他的如日子工具等代码,仅仅是为了说明领域层的一些基础 ...

  3. DDD领域驱动设计之运用层代码

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 3.DDD领域驱动设计之领域基础设施层 4.DDD领域驱动设计之领域服务 5.整体DEMO代码 什么是运用层,说 ...

  4. DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

    从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...

  5. [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)

    一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...

  6. DDD领域驱动设计初探(七):Web层的搭建

    前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...

  7. Java开发架构篇:DDD模型领域层决策规则树服务设计

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节介绍了领域驱动设计的基本概念以及按照领域驱动设计的思想进行代码分层,但是仅 ...

  8. ABP领域层

    1.实体Entites 1.1 概念 实体是DDD(领域驱动设计)的核心概念之一. 实体是具有唯一标识的ID且存储在数据库总.实体通常被映射成数据库中的一个表. 在ABP中,实体继承自Entity类. ...

  9. ABP(现代ASP.NET样板开发框架)系列之10、ABP领域层——实体

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之10.ABP领域层——实体 ABP是“ASP.NET Boilerplate Project (ASP.NET样板 ...

随机推荐

  1. vs2013卸载后重新安装不能用了,如何解决

    vs2013卸载后重新安装不能用了 据说VS卸载后有残留文件,估计是注册文件没删除,弄了很多方法,最后只有重装.你可以下载一个cclearn清理注册表,再装试试 我卸载完用360清理了一下 之后再安装 ...

  2. Java EE 和 Java Web

    什么是 Java Web 应用程序? Java Web 应用程序会生成包含各种类型的标记语言(HTML 和 XML 等)和动态内容的交互式 Web 页.它通常由 Web 组件组成(如 JavaServ ...

  3. 在Windows上编译最新的CURL,含有zlib,openssl

    最近,从网上下载了一个curl库,使用时各种报错,都无法启动,于是干脆就直接自己编译了. 1. 准备工作 a. 下载zlib zlib可以使得HTTP请求支持gzip压缩,其地址如下: 官网:http ...

  4. [转]为什么使用 Redis及其产品定位

    原文链接:http://www.infoq.com/cn/articles/tq-why-choose-redis 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据 ...

  5. Ubuntu-14.04.3下SDL2测试

    最近突然蛋痛想入门Linux,想写个跨平台的游戏,各种坑,备忘,稍微记点笔记. 主要参考这个文章 buntu14.04下C++开发SDL2应用 下载与安装 到http://www.libsdl.org ...

  6. Android系统启动顺序

    Android是一个基于Linux的开源操作系统.x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统.然而,所有的Android设备都 ...

  7. berkeley db replica机制 - 消息处理

    repmgr_method.c, __repmgr_start_int()repmgr_method.c, __repmgr_start_msg_threads()repmgr_msg.c, __re ...

  8. Hyper-V初涉_共享式网络链接

    任何一台计算机,如果不能与网络连通,可以说已经失去了大部分的功能,Windows 8尤是如此,虚拟机亦是如此. Hyper-V并不能对物理机的网卡进行识别,所以需要借助虚拟网卡通过物理机的网络共享实现 ...

  9. Await, and UI, and deadlocks! Oh my!

    It’s been awesome seeing the level of interest developers have had for the Async CTP and how much us ...

  10. AutoLayout - VFL

    其实很早就像整理出一份VFL的总结出来,觉得有很多东西可以写,但是真正去总结的时候发现,VFL也并没有很多东西,其实应该是在布局的过程中直接用VFL语句思考的过程比较难以形成,多数布局问题其实是在实际 ...