在工程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. springboot环境下配置过滤器和拦截器

    以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...

  2. CentOS6.8下安装memcached并设置开机自启动

    参考资料:http://www.cnblogs.com/handongyu/p/6419305.html    http://coolnull.com/1986.html 一.安装libevent 首 ...

  3. rpm打包tomcat

    1.制作rpm包 yum install rpm-build -y 2.创建工作目录 mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 3.准 ...

  4. epoll讲解--转自知乎

    Ctrip AIO底层使用epoll https://blog.csdn.net/z69183787/article/details/52943637 首先我们来定义流的概念,一个流可以是文件,soc ...

  5. python学习笔记8-邮件模块

    我们在开发程序的时候,有时候需要开发一些自动化的任务,执行完之后,将结果自动的发送一份邮件,python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,代码如下: impo ...

  6. Spring 学习03

    一.上节内容回顾 1 注解ioc操作 (1)使用注解创建对象 - 四个注解 (2)使用注解注入属性 - 两个注解 2 aop (1)aop原理 (2)aop术语 - 切入点 - 增强 - 切面 3 s ...

  7. luogu 4401 矿工配餐 多维dp

    五维dp,记忆化搜索会MLE超内存,所以用滚动数组,十分经典 五维dp #include <bits/stdc++.h> using namespace std; ; ][][][],la ...

  8. QMessageBox消息框

    QMessageBox提供两套接口来实现,一种是static functions(静态方法调用),另外一种 the property-base API(基于属性的API) #需要 from PyQt5 ...

  9. Django 2.0 学习(12):Django 模板语法

    Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...

  10. 下拉框combobox用法&级联餐单

    如果下来内容不用后台取数据,直接写死的话不用url属性,直接用data即可: <input id="orderstate" name="orderstate&quo ...