天天看點

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,如需轉載請自行聯系原作者