天天看点

Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)

    在我们的领域驱动开发中,DomainObject(领域对象)是一个自然oo对象,存在许多现实世界的关系关联,在我们的View端一个View却可能需要数据并不是所有关联。经常除非特殊的UI模式,我们ViewObject往往都会被弱化,而利用Data Transfer Object代替。我们的dto从do抽取大多时候都是将do 单一Object平面化,对于级联删除更新的集合抽取,非级联集合放弃。Green.ObjectPickUper就是一种由do抽取dto的实现策略,产生符合Green.AgileMapper 映射规则的dto对象。对象抽取可能存在多样性,这里只是实现了默认抽取规则,可能不能满足你的需求,你不需要急,因为在这里采用了策略模式来满足不同抽取算法的需求(ObjectPickUperBase),Green.ObjectPickUper并不依赖Green.AgileMapper你可以自由抽取。

Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)

我们看看单元测试看看Green.ObjectPickUper的简洁书写:

测试do对象仍是原对象StudentDo,参考CodePlex http://agilemapper.codeplex.com/

Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)

[TestMethod] 

      public void ObjectPickUper_GenCode_Test() 

      { 

          ObjectPickUperManager.Instance.IsSOAObject = false; 

          var str = ObjectPickUperManager.Instance.PickUp<StudenDo>("DTO"); 

          var str1 = ObjectPickUperManager.Instance.PickUp<ContactWay>("DTO"); 

          var str2 = ObjectPickUperManager.Instance.PickUp<KeyValuePair>("DTO"); 

          Assert.IsTrue(!string.IsNullOrEmpty(str)); 

          //验证编译是否正确 

          CompilerParameters option = new CompilerParameters(); 

          option.GenerateExecutable = false; 

          option.GenerateInMemory = true; 

          option.IncludeDebugInformation = false; 

          option.ReferencedAssemblies.Add("System.dll"); 

          option.ReferencedAssemblies.Add(typeof(System.Linq.IQueryable).Assembly.Location); 

          option.ReferencedAssemblies.Add(typeof(StudenDo).Assembly.Location); 

          option.ReferencedAssemblies.Add(typeof(Green.AgileMapper.CollectionMappingAttribute).Assembly.Location); 

          var result = CodeDomProvider.CreateProvider("c#").CompileAssemblyFromSource(option, str, str1, str2); 

          var assembly = result.CompiledAssembly; 

          Assert.IsFalse(result.Errors.HasErrors, "编译错误"); 

      }

Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)

这里采用CodeDom动态编译,查看是否存在编译错误。 

生成dto:

Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)

View Code

其他相关博文:

本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2012/04/05/ObjectPickUper.html,如需转载请自行联系原作者