首先我要说的是,我非常喜欢这种模式的优雅 - 我有一组基本实体,我已经实现了构建器(专门用于测试).然而,我发现(这可能是警告)随着我的程序的发展,我不得不回去重建建筑工人.最后,让它们保持更新似乎并不值得,我回过头来主要保留一个具有大量预配置实体的Object Mother.我是否应该继续更新构建器以供将来使用,或者TDB是否应该只在您的设计达到某种稳定性并且Object Mother变得太大时才会创建?
另请注意,我发现我没有在应用程序中的任何其他地方使用构建器,因为我喜欢使用.Net 3.0的新属性初始化语法.
我喜欢使用流畅的构建器来测试被测对象,以表达我正在创建的对象的本质.ObjectMothers往往变得笨拙并倾向于(在我遇到的实现中)最终隐藏对象创建的细节.
相比:
User fred = CreateUser("fred").WithReputation(900) .WithScholarBadge() .WithCriticBadge()
VS:
User fred = UserObjectMother.Fred()
表达用户拥有rep 900的想法,并且那两个特定的徽章与ObjectMother不一致.我看到的这种趋势是开发人员然后找到这种构建方法,这种方法Fred()
接近他们需要的方式,因此他们为对象添加了更多属性.另一方面,流畅的构建器表达了正在构建的内容,并且可以根据需要轻松地为测试创建特定用户.
也就是说,我最终也只是在测试代码中使用这些模式,因为生产代码通常不需要这种表达方式.