背景
我经常有单一职责的课程:
但我需要通过协调它们来执行更高级别的任务。这些对象应该被叫什么?
示例1 - 生成然后发送报告
示例2 - 生成然后发送报告
我的蹩脚解决方案
我的问题
我应该怎样称呼协调不同行为组合的对象?
是否有可以帮助我的设计模式?
答案 0 :(得分:3)
不要被课程名称所困扰,这不是制作简洁设计的唯一方法。使用方法名称,方法重载,方法参数类型,方法参数名称,构造函数重载,构造函数参数类型等。该语言中的许多工具可以帮助您的课程用户。
例如,由于您正在讨论一些只组合现有类的简单函数,您可以在辅助类上创建静态方法(如果您愿意,甚至可以为Report类创建它们的扩展方法):
public static class ReportHelper
{
public static void SaveToFile(Report report, string path) {};
public static void Send(Report report, string address) {};
}
如果您想更加抽象并支持更复杂的行为,那么封装行为的对象的正确名称将是工作流程。
public interface IReportAction
{
void Execute(Report report);
}
public class ReportWorkflow : IReportAction
{
//Composite pattern to keep a list of actions and execute them one by one
}
public class SendReportAction : IReportAction {}
public class WriteReportAction : IReportAction {}
拥有您的工作流类,您可以创建它的几个实例,并为它们提供一些面向业务的名称。例如,您发送报告的工作流程的作用是什么?也许它是一个EndOfDayReportWorkflow
,所以这样称呼它,里面可以格式化报告,对它做一些其他事情然后发送。您可以避免使用错误的名称,并且您将使用高级业务术语进行编码。
答案 1 :(得分:1)
ReportService 将是最常用的名称。第二位是 ReportAgent 。 ReportWorker 和 ReportController 也不常见。
不是模式和组织中的命名约定一样。
如上所述,一些后缀通常也带有意义。例如:
答案 2 :(得分:1)
ReportSendCoordinator和ReportSaveCoordinator(并假设生成报告是发送/保存报告的一部分。例如,如果我要给自己写一个TODO,我会写一份发送报告给Susan,事实上大多数工作实际上写的是暗示)。或者,如果这些报告有特定的目标/用途,请在这些报告之后命名。例如,TPSReportService将使用ReportGenerator和ReportDumper。
答案 3 :(得分:1)
这是一个纯类命名问题。你有许多小的,单一的责任类,并希望抽象出一个更有用的东西,你可以开箱即用的东西。我将它命名为ReportUtil
类。它甚至可以只有静态的公共方法。