zoukankan      html  css  js  c++  java
  • 1

    最近在写代码时想了这样一个问题,和室友讨论了一番,做了如下总结。
     
    简单来说:service是有状态的,工具类是无状态的,单例可以有状态也可以无状态。
     
    工具类提供静态方法,只要输入一定,输出就是一定的,它不依赖于其它外部的数据,也不保存数据
    例如,字符串的操作,日期格式的转换,json串的转换
     
    Service,虽然它的逻辑是一定的,但是它依赖于外部的数据,可能是其它系统中的(rpc调度),其它数据存储中的(访问mysql,redis),以及本地其它模块的(比如调用其他的service)
    误区:业务代码就必须得放在service里,这种想法是错误的,有些无状态的业务逻辑是可以封装成工具类的
     
    单例,它既可以是有状态,也可以是无状态的。单例首要考虑的是该类的对象在系统中存在一个最合适,但是这种往往都是有状态的,比如数据库连接,qconfig对象,本地文件持有对象,这种只应该有一个对象来持有,而且对象依赖于外部的配置或者数据,这种使用单例再合适不过了。
     
    而如果无状态的也用单例,也无可厚非。例如,对于加解密,如果传入的是明文密文+密钥,那么这种就可以设计成工具类,当然设计成单例也没有什么问题,但是工具类会更好一些
     
    如果只传明文密文,而依赖于外部的密钥,可以设计成单例。
  • 相关阅读:
    RAISERROR (Transact-SQL)的用法
    Eclipse 工程中set() get()等方法报错的解决方法
    SqlServer单步调试
    centOS7 查看防火墙状态
    如何查看Linux端口占用情况
    异常处理机制(Begin try Begin Catch)
    inner join 、left join 、right join 和full join的区别
    Emacs 快速指南
    x01.DiamondIDE: hello ide
    剑指offer大总结
  • 原文地址:https://www.cnblogs.com/43726581Gavin/p/9043834.html
Copyright © 2011-2022 走看看