在工程DDD.Domain中文件夹ModelPermission新建类:BAS_Object

 public partial class BAS_Obejct:AggreateRoot
{
//仓储接口
private IRepository<BAS_Obejct> irepository;
//构造函数
public BAS_Obejct(IRepository<BAS_Obejct> irepository)
{
this.irepository = irepository;
} /// <summary>
/// 创建对象
/// </summary>
/// <param name="code">聚合根的类名</param>
/// <param name="name"></param>
/// <param name="description">描述</param>
/// <param name="obj_id">对象的标识</param>
public void CreateObject(string code,string name,string description,Guid obj_id)
{
var bas_object = new BAS_Obejct();
bas_object.Id = base.Id;
bas_object.Name = name;
bas_object.Description = description;
bas_object.Code = code;
bas_object.Obj_Id = obj_id;
//添加到仓储中
irepository.Create(bas_object);
} /// <summary>
/// 根据对象名返回对象信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public BAS_Obejct GetObjectByName(string name)
{
return irepository.GetByCondition(p => p.Name == name, p => true).SingleOrDefault();
}
}

创建对象集:BAS_ObjectSet:(领域对象)

public partial class BAS_ObjectSet:AggreateRoot
{
private IRepository<BAS_ObjectSet> irepository;
public BAS_ObjectSet(IRepository<BAS_ObjectSet> irepository)
{
this.irepository = irepository;
} /// <summary>
/// 创建对象集
/// </summary>
/// <param name="name"></param>
/// <param name="description"></param>
/// <param name="obj_id"></param>
public void CreateObjectSet(string name,string description,Guid obj_id)
{
var bas_objectset = new BAS_ObjectSet();
bas_objectset.Id = base.Id;
bas_objectset.Name = name;
bas_objectset.Description = description;
bas_objectset.Obj_Id = obj_id;
irepository.Create(bas_objectset);
} /// <summary>
/// 根据对象集名返回对象集合
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public BAS_ObjectSet GetObjectSetByName(string name)
{
return irepository.GetByCondition(p => Name == name, p => true).SingleOrDefault();
}
}

对象和对象之间的关联:BAS_OOSet

public partial class BAS_OOSet:AggreateRoot
{
private IRepository<BAS_OOSet> irepository;
public BAS_OOSet(IRepository<BAS_OOSet> irepository)
{
this.irepository = irepository;
}
public BAS_OOSet() { } /// <summary>
/// 将多个对象添加到对象集中
/// </summary>
/// <param name="objects"></param>
/// <param name="objectset"></param>
public void CreateBAS_OOSet(List<BAS_Obejct> objects,BAS_ObjectSet objectset)
{
foreach(var obj in objects)
{
var bas_ooset = new BAS_OOSet();
bas_ooset.Id = base.Id;
bas_ooset.BAS_ObjectSet = objectset;
bas_ooset.BAS_Obejct = obj;
irepository.Create(bas_ooset);
} }
/// <summary>
/// 根据Object获取OOSET
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public List<BAS_OOSet> GetoosetByObject(BAS_Obejct obj)
{
return
irepository.GetByCondition(p => p.BAS_Obejct.Id == obj.Id, p => true);
}
/// <summary>
/// 根据ObjectSet获取OOSET
/// </summary>
/// <param name="objectset"></param>
/// <returns></returns>
public List<BAS_OOSet> GEtoosetByObjectSet(BAS_ObjectSet objectset)
{
return
irepository.GetByCondition(p => BAS_ObjectSet.Id == objectset.Id, p => true);
}
}

添加对象容器:

 public partial class BAS_ObejctContainer:AggreateRoot
{
private IRepository<BAS_ObejctContainer> irepository;
public BAS_ObejctContainer(IRepository<BAS_ObejctContainer> irepository)
{
this.irepository = irepository;
} /// <summary>
/// 创建对象容器
/// </summary>
/// <param name="obj_id"></param>
public void CreateObjectContainer(Guid obj_id)
{
var bas_objectcontainer = new BAS_ObejctContainer();
bas_objectcontainer.Id = base.Id;
irepository.Create(bas_objectcontainer);
}
}

创建DomainService:BAS_ObjectService类:

public class BAS_ObjectService
{
private IRepository<BAS_Obejct> irepositoryobject;
private IRepository<BAS_ObejctContainer> irepositoryobjectcontainer; public BAS_ObjectService(IRepository<BAS_Obejct> irepositoryobject,
IRepository<BAS_ObejctContainer> irepositoryobjectcontainer)
{
this.irepositoryobject = irepositoryobject;
this.irepositoryobjectcontainer = irepositoryobjectcontainer;
} /// <summary>
/// 创建对象
/// </summary>
/// <param name="name"></param>
/// <param name="description"></param>
/// <param name="code"></param>
public void CreateObject(string name,string description,string code)
{
var bas_object = new BAS_Obejct(irepositoryobject);
var obj_id = Guid.NewGuid();
bas_object.CreateObject(code, name, description, obj_id); var bas_objectcontainer = new BAS_ObejctContainer(irepositoryobjectcontainer);
bas_objectcontainer.CreateObjectContainer(obj_id);
} /// <summary>
/// 根据对象Code返回对象
/// </summary>
/// <param name="objectcode"></param>
/// <returns></returns>
public BAS_Obejct GetObjectByCode(string objectcode)
{
return
irepositoryobject.GetByCondition(p => p.Code == objectcode, p => true)
.SingleOrDefault();
}
}

对象和对象之间的领域服务:BAS_OOSetService

 public class BAS_OOSetService
{
private IRepository<BAS_Obejct> irepositoryobject;
private IRepository<BAS_ObjectSet> irepositoryobjectset;
private IRepository<BAS_OOSet> irepositoryooset;
BAS_OOSet ooset;
public BAS_OOSetService(IRepository<BAS_Obejct> irepositoryobject,
IRepository<BAS_ObjectSet> irepositoryobjectset,
IRepository<BAS_OOSet> irepositoryooset)
{
this.irepositoryobject = irepositoryobject;
this.irepositoryobjectset = irepositoryobjectset;
this.irepositoryooset = irepositoryooset;
ooset = new BAS_OOSet(irepositoryooset);
} /// <summary>
/// 添加多个对象到对象集中
/// </summary>
/// <param name="objectnames"></param>
/// <param name="objectsetname"></param>
public void CreateBas_OOSet(string[] objectnames,string objectsetname)
{
var listobject = new List<BAS_Obejct>();
for(int i=0;i<objectnames.Length;i++)
{
var obj=
irepositoryobject.GetByCondition(p => p.Name == objectnames[i],
p => true).SingleOrDefault();
listobject.Add(obj);
}
var objectset = irepositoryobjectset.GetByCondition(p => p.Name == objectsetname,
p => true).SingleOrDefault();
ooset.CreateBAS_OOSet(listobject, objectset); } /// <summary>
/// 根据对象名获取OOSET
/// </summary>
/// <param name="objectname"></param>
/// <returns></returns>
public List<BAS_OOSet> GetoosetByObjectName(string objectname)
{
var obj =
irepositoryobject.GetByCondition(p => p.Name == objectname, p => true)
.SingleOrDefault();
return ooset.GetoosetByObject(obj); }
/// <summary>
/// 根据对象集名获取OOSET
/// </summary>
/// <param name="objectsetname"></param>
/// <returns></returns>
public List<BAS_OOSet> GetoosetByObjectSetName(string objectsetname)
{
var objectset =
irepositoryobjectset.GetByCondition(p => p.Name == objectsetname, p => true)
.SingleOrDefault();
return ooset.GEtoosetByObjectSet(objectset);
}
/// <summary>
/// 根据对象Code获取OOSET
/// </summary>
/// <param name="objectcode"></param>
/// <returns></returns>
public List<BAS_OOSet> GetoosetByObjectCode(string objectcode)
{
var obj = irepositoryobject.GetByCondition(p => p.Code == objectcode, p => true)
.SingleOrDefault();
return ooset.GetoosetByObject(obj);
}
}

添加BAS_ObjectSetService类:

public class BAS_ObjectSetService
{
private IRepository<BAS_ObjectSet> irepositoryobjectset;
private IRepository<BAS_Obejct> irepositoryobject;
private IRepository<BAS_ObejctContainer> irepositoryobjectcontainer;
private IRepository<BAS_OOSet> irepositoryooset; BAS_ObjectSet bas_objectset;
BAS_OOSet bas_ooset;
BAS_OOSetService bas_oosetservice;
public BAS_ObjectSetService(IRepository<BAS_ObjectSet> irepositoryobjectset,
IRepository<BAS_Obejct> irepositoryobject,
IRepository<BAS_ObejctContainer> irepositoryobjectcontainer,
IRepository<BAS_OOSet> irepositoryooset)
{
this.irepositoryobject = irepositoryobject;
this.irepositoryobjectset = irepositoryobjectset;
this.irepositoryobjectcontainer = irepositoryobjectcontainer;
this.irepositoryooset = irepositoryooset;
bas_objectset = new BAS_ObjectSet(irepositoryobjectset);
bas_ooset = new BAS_OOSet(irepositoryooset);
bas_oosetservice = new BAS_OOSetService(irepositoryobject, irepositoryobjectset, irepositoryooset);
}
/// <summary>
/// 创建对象集
/// </summary>
/// <param name="name"></param>
/// <param name="description"></param>
public void CreateObjectSet(string name,string description)
{
var obj_id = Guid.NewGuid();
bas_objectset.CreateObjectSet(name, description, obj_id); var objectcontainer = new BAS_ObejctContainer(irepositoryobjectcontainer);
objectcontainer.CreateObjectContainer(obj_id);
} /// <summary>
/// 添加多个对象到对象集
/// </summary>
/// <param name="objectnames"></param>
/// <param name="objectsetname"></param>
public void AddObjectsToObjectSet(List<string> objectnames,string objectsetname)
{
var objectset = bas_objectset.GetObjectSetByName(objectsetname); var objects = new List<BAS_Obejct>(); foreach(var objectname in objectnames)
{
var bas_object = new BAS_Obejct(irepositoryobject);
var obj = bas_object.GetObjectByName(objectname);
objects.Add(obj);
}
bas_ooset.CreateBAS_OOSet(objects, objectset);
} /// <summary>
/// 根据对象名获取所属对象集
/// </summary>
/// <param name="objectname"></param>
/// <returns></returns>
public List<BAS_ObjectSet> GetObjectSetByObjectName(string objectname)
{
var oosets = bas_oosetservice.GetoosetByObjectName(objectname);
var objectsets = new List<BAS_ObjectSet>();
foreach(var ooset in oosets)
{
var objectset =
irepositoryobjectset.GetByCondition(p => p.Id == ooset.BAS_ObjectSet.Id,
p => true).SingleOrDefault();
objectsets.Add(objectset);
} return objectsets;
}
/// <summary>
/// 根据对象CODE获取所属对象集
/// </summary>
/// <param name="objectcode"></param>
/// <returns></returns>
public List<BAS_ObjectSet> GetObjectSetByObjectCode(string objectcode)
{
var oosets = bas_oosetservice.GetoosetByObjectCode(objectcode);
var objectsets = new List<BAS_ObjectSet>();
foreach (var ooset in oosets)
{
var objectset =
irepositoryobjectset.GetByCondition(p => p.Id == ooset.BAS_ObjectSet.Id,
p => true).SingleOrDefault();
objectsets.Add(objectset);
} return objectsets;
} /// <summary>
/// 判断某个对象是否在某个对象集中
/// </summary>
/// <param name="objectname"></param>
/// <param name="objectsetname"></param>
/// <returns></returns>
public bool IsObjectSetContainObject(string objectname,string objectsetname)
{
return GetObjectSetByObjectName(objectname).Contains
(bas_objectset.GetObjectSetByName(objectsetname));
}
}

对象的应用服务:ObjectAppService

   public class ObjectAppService
{
IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext))
as IRepositoryContext;
IRepository<BAS_Obejct> objectrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_Obejct>))
as IRepository<BAS_Obejct>;
IRepository<BAS_ObejctContainer> objectcontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_ObejctContainer>))
as IRepository<BAS_ObejctContainer>; BAS_ObjectService bas_obejctservice;
BAS_Obejct bas_object; public ObjectAppService()
{
bas_obejctservice = new BAS_ObjectService(objectrepository,
objectcontainerrepository);
bas_object = new BAS_Obejct(objectrepository);
} /// <summary>
/// 对象创建
/// </summary>
/// <param name="name"></param>
/// <param name="description"></param>
/// <param name="code"></param>
public void CreateObject(string name,string description,string code)
{
bas_obejctservice.CreateObject(name, description, code);
context.Commit();
} /// <summary>
/// 根据对象名获取对象
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public BAS_Obejct GetObjectByName(string name)
{
return bas_object.GetObjectByName(name);
}
}

ObjectSetAppService服务对象:

 public class ObjectSetAppService
{
IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext))
as IRepositoryContext;
IRepository<BAS_Obejct> objectrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_Obejct>))
as IRepository<BAS_Obejct>;
IRepository<BAS_ObejctContainer> objectcontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_ObejctContainer>))
as IRepository<BAS_ObejctContainer>;
IRepository<BAS_ObjectSet> objectsetrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_ObjectSet>))
as IRepository<BAS_ObjectSet>;
IRepository<BAS_OOSet> oosetrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_OOSet>))
as IRepository<BAS_OOSet>; BAS_ObjectSetService objectsetservice;
BAS_ObjectSet bas_objectset; public ObjectSetAppService()
{
objectsetservice =
new BAS_ObjectSetService(objectsetrepository, objectrepository, objectcontainerrepository, oosetrepository);
bas_objectset = new BAS_ObjectSet(objectsetrepository);
} /// <summary>
/// 对象集创建
/// </summary>
/// <param name="name"></param>
/// <param name="description"></param>
public void CreateobjectSet(string name,string description)
{
objectsetservice.CreateObjectSet(name, description);
context.Commit();
}
/// <summary>
/// 根据对象集名返回对象集
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public BAS_ObjectSet GetObjectSetByName(string name)
{
return bas_objectset.GetObjectSetByName(name);
}
/// <summary>
/// 将多个对象添加到对象集中
/// </summary>
/// <param name="objectnames"></param>
/// <param name="objectsetname"></param>
public void AddObjectToObjectSet(string[] objectnames,string objectsetname)
{
objectsetservice.AddObjectsToObjectSet(objectnames.ToList(), objectsetname);
context.Commit();
} /// <summary>
/// 判断一个对象是否在对象集中
/// </summary>
/// <param name="objectname"></param>
/// <param name="objectsetname"></param>
/// <returns></returns>
public bool IsObjectSetContainObject(string objectname,string objectsetname)
{
return
objectsetservice.IsObjectSetContainObject(objectname, objectsetname);
}
}

单元测试的代码:

 [TestMethod]
public void AddObject()
{
ObjectAppService objectservice = new ObjectAppService();
objectservice.CreateObject("产品对象", "标识产品对象", "Product");
Assert.IsNotNull(objectservice.GetObjectByName("产品对象"));
} [TestMethod]
public void AddObjectSet()
{
ObjectSetAppService objectsetservice = new ObjectSetAppService();
objectsetservice.CreateobjectSet("订单对象集", "包含订单业务所有的对象");
Assert.IsNotNull(objectsetservice.GetObjectSetByName("订单对象集"));
} [TestMethod]
public void AddObjectToObjectSet()
{
ObjectSetAppService objectsetservice =
new ObjectSetAppService();
string[] objects = new string[1];
objects[0] = "产品对象";
objectsetservice.AddObjectToObjectSet(objects, "订单对象集");
Assert.IsTrue(objectsetservice.IsObjectSetContainObject("产品对象", "订单对象集"));
}

DDD领域模型数据访问之对象(十一)的更多相关文章

  1. DDD领域模型数据访问权限(九)

    权限分为:数据权限和功能权限 数据权限: 查询提供附加表达式的支持: //提供附加表达式的支持 List<TAggreateRoot> GetByCondition(Expression& ...

  2. DDD领域模型数据访问权限之权限(十二)

    实现权限的领域对象:BAS_Permission public partial class BAS_Permission:AggreateRoot { private IRepository<B ...

  3. DDD领域模型数据访问权限之用户权限(十)

    BAS_PRService岗位和角色服务: public class BAS_PRService { //岗位 private IRepository<BAS_Post> ireposit ...

  4. web前端与后台数据访问的对象封装

    前言:通常情况下,在不使用angularJS/nodeJS/react等这类完整性的解决方案的js时,前端与后台的异步交互都是使用Ajax技术进行解决 一:作为java web开发工程师可能以下代码是 ...

  5. ASP.NET MVC 音乐商店 - 4. 数据访问

    上一次,我们使用了模拟的数据从控制器发送到视图模板.现在,我们开始使用真正的数据库,在这个教程中,我们将指导如何使用 SQL Server Compact 版的数据库,它经常被称为 SQL CE, 来 ...

  6. Spring Boot的数据访问:CrudRepository接口的使用

    示例 使用CrudRepository接口访问数据 创建一个新的Maven项目,命名为crudrepositorytest.按照Maven项目的规范,在src/main/下新建一个名为resource ...

  7. 【7】AccessDB快速数据访问

    阅读目录 C#和VB数据访问的比较 AccessDB的设计 数据库的连接 三种主要操作 错误输出及调试 小结 回到顶部 C#和VB数据访问的比较 C#中要进行一次普通的数据库查询,需要创建连接,再根据 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    上一篇文章(https://www.cnblogs.com/meowv/p/12909558.html)完善了项目中的代码,接入了Swagger.本篇主要使用Entity Framework Core ...

  9. DDD领域模型和充血对象

    DDD领域模型 官方说法 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略 ...

随机推荐

  1. 《springCloud系列》——Eureka 进行服务治理

    整理一下: @EnableEurekaServer 注册中心 @EnableDiscoveryClient 提供服务 @EnableFeignClients 消费者(Feign特有的,而且他自带断路器 ...

  2. 【小白技术笔记】保存皮皮虾APP无水印视频到手机相册,只需要三步 [技术干货]

    百万段友回皮皮虾,转身一变,都成了皮友.作为当年的资深段友,今天的皮友的我.看到好视频,经典视频,搞笑视频,就想保存一份到手机相册,然后皮皮虾啊皮皮虾,有个让人很讨厌的地方,保存视频的时候就有皮皮虾的 ...

  3. Hbase记录-HBaseAdmin类

    HBaseAdmin是一个类表示管理.这个类属于org.apache.hadoop.hbase.client包.使用这个类,可以执行管理员任务.使用Connection.getAdmin()方法来获取 ...

  4. loadrunner controller如何执行测试

    使用Virtual User Generator编写需要测试的脚本   打开controller,在左侧的available scripts里选择需要测试的脚本添加(Add)到scripts in s ...

  5. Redis主从加Sentinel模式部署

    总体部署 一主二从三哨兵 ip地址分配分别为 主 127.0.0.1:6379 从 127.0.0.1:6389 从 127.0.0.1:6399 哨兵 127.0.0.1:26379 哨兵 127. ...

  6. Linux 命令详解(七)Systemd 入门教程:命令篇

    Systemd 入门教程:命令篇http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

  7. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...

  8. string字符串js操作

    String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...

  9. sonar扫描java、js、jsp技术

    最近在弄sonar扫描的事情,之前一直只能扫描java代码,这样统计出来的数据上报领导很多开发人员不服(说我不用写jsp了不用写js了?), 那么好,于是乎继续整sonar,在官网中看到sonar其实 ...

  10. jira7.3.6添加导出excel的按钮

    在 jira的application-data 文件夹下 jira-config.properties 文件(如果没有就创建一个) 中添加以下内容:jira.export.excel.enabled= ...