DDD领域驱动之干货(三)完结篇!
首先这里发一下结构图,因为是重写的,但是代码都是一样所有如下:
这里我先说一下看了大部分的DDD文章都是采用的WCF做服务,这里呢我用的是webapi做服务,WCF和WEBAPI的区别可以去百度下。
好了。现在我们看下automapper的具体实现。
因为automapper又一个Profile类,而我们自己写的类去继承这个类,所有如下图:
上图是创建映射关系,下面就去添加映射
这些做完了 我们现在需要使用
这里的dto类型是CostomDTO 也就是数据传输对象。
下面我们来看下工作单元,下面我直接贴代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KuRuMi.Mio.DoMain.Repository.UnitOfWork { /// <summary> /// 表示所有集成该接口都是工作单元的一种实现 /// </summary> public interface IUnitOfWork { /// <summary> /// 提交 /// </summary> void Commit(); /// <summary> /// 异步提交 /// </summary> /// <returns></returns> Task CommitSyncAsync(); /// <summary> /// 回滚 /// </summary> void Rollback(); /// <summary> /// 已经提交过了 /// </summary> bool Committed { get; } /// <summary> /// 事务支持 /// </summary> //bool DistributedTransactionSupported { get; } } }
这是IUnitOfWork接口代码。
using KuRuMi.Mio.DoMainModel.BaseModel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KuRuMi.Mio.DoMain.Repository.UnitOfWork { public interface IUnitOfWorkContext : IUnitOfWork, IDisposable { /// <summary> /// 将指定的聚合根标注为“新建”状态。 /// </summary> /// <typeparam name="TAggregateRoot">需要标注状态的聚合根类型。</typeparam> /// <param name="obj">需要标注状态的聚合根。</param> void RegisterNew<TAggregateRoot>(TAggregateRoot obj) where TAggregateRoot : class, IAggregateRoot; /// <summary> /// 将指定的聚合根标注为“更改”状态。 /// </summary> /// <typeparam name="TAggregateRoot">需要标注状态的聚合根类型。</typeparam> /// <param name="obj">需要标注状态的聚合根。</param> void RegisterModified<TAggregateRoot>(TAggregateRoot obj) where TAggregateRoot : class, IAggregateRoot; /// <summary> /// 将指定的聚合根标注为“删除”状态。 /// </summary> /// <typeparam name="TAggregateRoot">需要标注状态的聚合根类型。</typeparam> /// <param name="obj">需要标注状态的聚合根。</param> void RegisterDeleted<TAggregateRoot>(TAggregateRoot obj) where TAggregateRoot : class, IAggregateRoot; } }