我一直在学习使用服务类作为创建和修改对象值的模板。
我的问题如下:
服务类的定义是什么?我正在学习的书没有对它们进行定义,而且我很难在网上找到定义。
当所有方法都可以写在一个类中时,为什么我们要使用一个单独的服务类?
所有服务类是否应遵循以下结构:
Instance variables.
Default and non-default constructors
Accessor and mutator methods
toString method
Equals method
Other help methods as required
或者服务类可以用作对象模板以外的东西吗?
最佳答案
对于您所询问的内容没有硬性定义,只有人们或多或少遵守的“一般做法”,具体取决于具体情况。
通常,“服务”类处理来自某种用户的请求,将业务逻辑和持久性封装在正在采取的操作之外。
例如,用户想要购买一件商品。服务类公开了一些方法 buy(Item item)
。服务类实例化了一些关于谁在采取行动的概念。它完成了所有“繁重的工作”,包括标记商品已购买、调用处理汇款的类、调用负责在用户数据中放置“收据”的类等。
它不做的是直接做这些事情。它不写入数据库,但根据需要遵从 User
、Item
、Inventory
和 Receipt
类,谁都知道如何保存自己的信息。 (或者它与执行此操作的数据库服务对话。)“服务”类确实将许多较低级别的功能粘合在一起。
在服务类中这样做的原因是代码库结构。例如,如果您有一个 Item
对象,它可能会因销售、管理员 Markdown 、员工将其标记为丢失等而被修改。您可以将所有这些方法放在一个类,但是当你想更新结账流程时你会去哪里?它变得痛苦。相反,您有不同的服务:PurchaseService
、InventoryManagementService
等。具体的服务取决于您的用例,以及在哪些地方进行逻辑划分是有意义的:对于例如,它可以按操作类别(“购买”)或用户类型(“CustomerService”、“OwnerService”、“EmployeeService”等),以便更轻松地处理不同的权限。
此外,服务类没有理由关心数据最终存储方式或存储位置的细节。它应该与有关数据库或文件或您拥有的内容的详细信息“不可知”。它实际上只是在操纵实际负有该责任的特定类。请记住:每个类实际上应该只有一个责任域。如果一个类与数据库对话,它不应该执行还计算的“业务逻辑”,例如,购买所欠的税款。
请注意,Java 语言 决不会强制执行任何这些做法。它们只是人们为了提供额外的结构并让他们的生活更轻松而做的事情。编译器不关心。
"template"是什么意思不清楚,但您布置的模板实际上是任何类的模板,因此不受此上下文的限制。
关于java - 关于服务类的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619221/