我有一个Employee对象,它聚合了一些其他对象,例如HRData和AssignmentHistory。过去,所有这些逻辑都直接包含在Employee对象中,但为了可测试性和可管理性,我将其拆分为使用聚合。但是,我没有直接公开聚合对象,而是使用了委托,这样客户就不会意识到内部工作。例如,不要这样做:
employee.getHRDataOn("2010-01-01").getProfile();
客户会这样做:
employee.getProfileOn("2010-01-01");
我真的很喜欢这个,因为它遵循“黑盒”方法,这意味着我可以随意更改实现而不影响客户端,同时仍然由内部可测试的小对象组成。问题是Employee对象已经显着增长,因为它现在有 5 个聚合对象,并且它的接口上充斥着getXXXOn()方法。
您使用哪种方法,为什么?有没有我忽略的替代方案?使用委托方法的问题是接口变得庞大,而暴露聚合对象的问题是代码不太灵活,并且客户端需要知道哪个聚合负责什么。有什么建议么?