在工程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. 11、JPA-JPQL

    /** * JPQL,Java Persistence Query Language 的简称.是一种和 SQL 类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏 ...

  2. 学习windows编程 day3 之窗口绘画一:点线绘制

    #include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...

  3. idea出现乱码问题

    Intellij Idea打包工程时控制台显示乱码 这主要是maven编译时编码问题导致的.在Intellij的settings中maven的run配置中设置它的VM Options为-Darchet ...

  4. JAVA记录-JDBC介绍

    JDBC(Java DataBase Connection),java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...

  5. MySql Workbench导出ER图并存为PDF文件

    一.登陆数据库 二.点击Database  => Reverse Engineer 三.填入登陆信息后next => next,选择要生成ER模型的数据库 四.点击next => n ...

  6. MIPS指令学习二

    1.MIPS寻址方式 MIPS架构的寻址模式有寄存器寻址.立即数寻址.寄存器相对寻址和PC相对寻址4种,其中寄存器相对寻址.PC相对寻址介绍如下: 1.1.寄存器相对寻址 这种寻址模式主要被加载/存储 ...

  7. golang string int int64转换

    #string到int int,err:=strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt(string, 10, 6 ...

  8. Java SE之 Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!【摘抄】

    声明一下:此BUG确实经常困扰我许久,今日遇到很强大的一套解决办法,又怕原博主的网页以后查找不到,故此摘抄copy一份,望得各方侵权一事而谅解. 传送门先行送上:http://blog.csdn.ne ...

  9. HDU2444 The Accomodation of Students【匈牙利算法】

    题意: 有n个学生,有m对人是认识的,每一对认识的人能分到一间房,问能否把n个学生分成两部分,每部分内的学生互不认识,而两部分之间的学生认识.如果可以分成两部分,就算出房间最多需要多少间,否则就输出N ...

  10. 离线安装IDEA插件

    1.idea插件官网http://plugins.jetbrains.com/idea 搜索并下载对应的插件的zip包 2.打开软件进行离线安装 IDEA-->Setting-->Plug ...