Answers:
线条可能有点模糊,但是我这样看:
服务类/接口提供了一种客户端与应用程序中的某些功能进行交互的方式。这通常是公开的,具有一定的商业意义。例如,一个TicketingService
接口可以让你buyTicket
,sellTicket
等等。
助手类倾向于对客户端隐藏,并且在内部用于提供一些没有业务领域意义的样板工作。例如,假设您要将日期转换为时间戳,以便将其保存到特定的数据存储中。您可能有一个使用执行该处理DateConvertor
的convertDateToTimestamp
方法的实用程序类。
服务不仅与DAO紧密耦合,而且是一个比持久性更广泛的术语/使用模式
如果按照该原理进行编码,则助手类不会违反SRP。也就是说,每个方法都应该做一件事情,一件事情要做,该类应该执行一种类型的实用程序帮助(例如,日期转换),并做到这一点。
对我来说,我遵循Eric Evans的定义,service
它是这样的:
通常,在设计良好的系统中,大多数类(在域模型中)具有很明确的职责或功能,因为它们处理模型中的特定实体或一组实体。
即
当您具有不属于任何特定实体的功能时,可能很难找到适合其放置的位置。即某种东西封装了一个涉及Account
AND的过程Customer
。
因此,这就是a service
出现的地方。在这里,您将代码放入域模型中,但并不自然地属于一个实体/组件或另一个实体/组件。
我认为helper
这是一种策略课程。对我来说,这是放置代码的地方,该代码需要由各种类重用,但可能不适合使用它的类层次结构中的抽象方法。我个人觉得这个词helper
有点含糊,在我的模型中并没有真正使用它们。尽管它们存在于我使用的库中。
服务类别:包含业务逻辑。
助手类:此类是可重用组件的一种类型。
您混合了两个不相关的主体。服务和帮助程序类未连接。特别是术语“服务类”具有误导性-我认为您所指的是“服务”,其抽象程度高于类。服务的特点是
“一种允许访问一个或多个功能的机制,其中访问是使用规定的接口提供的,并且与服务描述所指定的约束和策略一致地进行行使。”
该定义会根据您的上下文而稍有变化。但是,关键是术语“服务”处于抽象级别,架构级别和领域知识级别。“帮助程序类”是一种设计模式(尽管它是一种反模式,因为它们倾向于演变为Blob或God类),它指的是封装通用操作的类(请注意,该类处于较低的抽象级别并且已连接)该应用程序/解决方案的知识)。我知道以下事实:几乎不存在不包含任何帮助程序类的软件,但这仍然是一种不好的做法。