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