使用映射库防止重构错误
Prevent refactoring mistakes with mapping libraries
给定
class A { string Name {get;set;} }
class B { string Name {get;set;} }
然后我使用 automapper 在 A 和 B 之间进行转换。后来,我将 A.Name
重命名为 A.MyName
:
class A { string MyName {get;set;} }
class B { string Name {get;set;} }
由于隐式配置,这会破坏我的映射。隐式配置隐式地在 A
和 B
之间创建关系。重构算法不识别这种关系从而产生中断。
什么映射器解决了这个问题?
使用接口 interface ABcommon { string Name {get;set;} }
并且 class A 和 B 实现它。重命名将起作用。
在 AutoMapper 中,假设您已经处理了映射中的所有属性(通过映射它们或显式忽略它们),Mapper.AssertConfigurationIsValid();
是解决此问题的方法。
正如 documentation 所说:
Executing this code produces an AutoMapperConfigurationException, with a descriptive message. AutoMapper checks to make sure that every single Destination type member has a corresponding type member on the source type.
因此,在您重构 类 之后,将不会定义映射,测试将失败。
您可以将它放在单元测试中,如果没有任何测试,也可以放在启动代码中。
给定
class A { string Name {get;set;} }
class B { string Name {get;set;} }
然后我使用 automapper 在 A 和 B 之间进行转换。后来,我将 A.Name
重命名为 A.MyName
:
class A { string MyName {get;set;} }
class B { string Name {get;set;} }
由于隐式配置,这会破坏我的映射。隐式配置隐式地在 A
和 B
之间创建关系。重构算法不识别这种关系从而产生中断。
什么映射器解决了这个问题?
使用接口 interface ABcommon { string Name {get;set;} }
并且 class A 和 B 实现它。重命名将起作用。
在 AutoMapper 中,假设您已经处理了映射中的所有属性(通过映射它们或显式忽略它们),Mapper.AssertConfigurationIsValid();
是解决此问题的方法。
正如 documentation 所说:
Executing this code produces an AutoMapperConfigurationException, with a descriptive message. AutoMapper checks to make sure that every single Destination type member has a corresponding type member on the source type.
因此,在您重构 类 之后,将不会定义映射,测试将失败。
您可以将它放在单元测试中,如果没有任何测试,也可以放在启动代码中。