Abp 官网开始的教程例子,是IRpositoty<entity> 直接出现在应用层。但是如果是一个聚合根也会这样吗?  那么聚合根是访问仓储的最小单元,要通过聚合根来操作业务,就是实体,那么实体的增删改查,也应该在聚合根里面。

这就就有一个问题,实体继承了聚合根,,他没有仓储,怎么保存呢?

方法一: 依赖注入,这是不行的,这样数据库迁移不成功。

  public class Order :AggregateRoot, IRepository<Order>, ICreationAudited
{
[NotMapped]
private IRepository<Order> _repository { get; set; }
public Order(IRepository<Order> repository)
{
_repository = repository;
}
public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set ; }
public List<OrderItem> OrderItem { get; set; }
public string Remark { get; set; }
public Address Address { get; set; } public Order Insert(Order entity)
{
return entity;
}
}
 
方法二:继承仓储接口,
public class Order :AggregateRoot, IRepository<Order>, ICreationAudited
{ public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set ; }
public List<OrderItem> OrderItem { get; set; }
public string Remark { get; set; }
public Address Address { get; set; } public Order Insert(Order entity)
{
return entity;
}
}
   这样的问题,是应用层怎么调用呢?应用层还是要出现仓储。
 方法三:实现聚合根接口,继承仓储类:在代码中是Test2.
 
    public class Test2 :  Test2Repository, IAggregateRoot, ICreationAudited
{
public long? CreatorUserId { get; set; }
public DateTime CreationTime { get; set; } public string Remark { get; set; } public ICollection<IEventData> DomainEvents => throw new NotImplementedException(); public int Id { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public bool IsTransient()
{
throw new NotImplementedException();
}
}

这样编译不过去,因为Test2Repository在EF那一层,而Core 是谁也不依赖的,在最下面,这个也是行不通的。

方法四:是这个这个聚合根,再实现一个IOrder 接口,这个接口和仓储接口有重合,在应用层,暴露IOrder 接口就行了。

  IOrder可以在应用层依赖注入进去,因为他的postfix 是Order。
  泛型方法在调用的时候,可以作为类型传递的(参数或返回值)
      这个执行完,不会保存,
上面是3个不可行的,下面有个方法可以
Success方法一:使用属性注入就可以了。注意,要把聚合根放在依赖注入框架中。这个例子是Test
       IocManager.Register<Test>(DependencyLifeStyle.Transient);
 
 
 

Abp 聚合测试的更多相关文章

  1. 关于ABP聚合根类AggregateRoot的思考

    AggregateRoot和Entity的区别 AggregateRoot继承于Entity,并实现了IGeneratesDomainEvents接口 public class AggregateRo ...

  2. java1.8中Lambda表达式reduce聚合测试例子

    public class LambdaTest { public static void main(String[] args) { // 相当于foreach遍历操作结果值 Integer out ...

  3. ABP入门系列(11)——编写单元测试

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 前言 In computer programming, unit testing is a ...

  4. Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架

    一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终 ...

  5. 使用 DryIoc 替换 Abp 的 DI 框架

    一.背景 你说我 Castle Windsor 库用得好好的,为啥要大费周章的替换成 DryIoc 库呢?那就是性能,DryIoc 是一款优秀而且轻量级的 DI 框架,整个项目代码就两个文件,加起来代 ...

  6. Java Junit测试框架

    Java    Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...

  7. Elasticsearch 6.x 入门测试

    首先听一下官方的话: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 我尝试了使用Java作为Cl ...

  8. 2020 | 可替代Selenium的测试框架Top15

    本文首发于 微信公众号: 软测小生 Selenium是一种开源自动测试工具.它可以跨不同的浏览器和平台在Web应用程序上执行功能,回归,负载测试.Slenium是最好的工具之一,但确实有一些缺点. 业 ...

  9. 小试牛刀ElasticSearch大数据聚合统计

    ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...

随机推荐

  1. An error occurred while starting a transaction on the provider connection. See the inner exception for details.

    用EntityFramework循环操作数据时,报了如下错误 An error occurred while starting a transaction on the provider connec ...

  2. tomcat部署web项目的问题

    1:启动窗口乱码 原因 Tomcat默认都是UTF-8的,但是控制台是GBK的,要保持一致 解决办法 打开tomcat目录下的conf/目录下logging.properties找到java.util ...

  3. windows/Linux 下安装coreseek/sphinx

    2013年12月8日 17:26:26 注意的地方: 1.配置文件的 数据源, 索引, 服务 这3处配置的路径要写成windows识别的路径,最好是绝对路径 2.安装windows服务的时候,可以不带 ...

  4. Qt编写自定义控件26-平铺背景控件

    一.前言 平铺背景控件,主要的应用场景是作为画布出现,黑白相间的背景图,然后上面可以放置图片图形等,使得看起来更美观,比如PS软件新建图层以后的背景,FireWorks软件新建画布以后的透明背景,IC ...

  5. 电力项目十一--js添加浮动框

    1.添加浮动窗口样式 <!-- 浮动窗口样式css begin --> <style type="text/css"> #msg_win{border:1p ...

  6. JAVA 基础编程练习题43 【程序 43 求奇数个数】

    43 [程序 43 求奇数个数] 题目:求 0—7 所能组成的奇数个数. package cskaoyan; public class cskaoyan43 { @org.junit.Test pub ...

  7. Delphi repeat Until 运用

    procedure TForm3.SpeedButton1Click(Sender: TObject); Var I:integer; begin I:=; repeat I:=I+; ; ShowM ...

  8. php-fpm 重启

    查看php-fpm进程数:ps aux | grep -c php-fpm [root@ssy106c14c190c69 etc]# ps -ef | grep php-fpm ---  查看php- ...

  9. python 内置数据结构 切片

    切片 通过索引区间访问线性结构的一段数据 sequence[start:stop] 表示返回[start,stop]区间的子序列 支持负索引 start为0,可以省略 stop为末尾,可以省略 超过上 ...

  10. [Python[PyQt]] ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'

    解决办法: pip install PyQtWebEngine