问题描述
上下文:目前,我正在对spring + hibernate源代码进行重构。 在以下情况下,我有一个与最佳方法有关的查询。
问题:将值从Controller类传递到Service接口,作为不同的参数或作为类对象传递时,哪个更好? [关于内存,可重用性等]
例:
myservice.getUser(login,password,....)
要么
myservice.getUser(userObj)
1楼
恕我直言,每种方法都需要权衡取舍,但通常我会尝试使用模型对象(=“ User”,“ Product” ...从人类的角度来看很有意义)。 我能想到的折衷点:
1)内存和垃圾回收:“用户”对象稍微贵一点,需要在堆上分配,但是在大多数IT应用程序中不应成为瓶颈。 Plus GC擅长处理此类短期对象。
2)'用户'对于将来的扩展和可读性很有用:如果您需要的用户详细信息(帐户,居住国家...)比封装用户更好,那么您的服务签名将成为一场噩梦...
3)多态性:如果将其封装为“用户”,则可能会有不同的用户类型(例如“ FreeUser”,“ VIPUser”),只要您的服务都提供“用户”,则您的服务并不关心其确切的类型。 isEntitledForDiscount()”
4)我对部分填充的对象存在严重的困境。 即,如果我有一个具有许多属性(电子邮件,工作经历...)的“用户”模型,但是某些服务只需要其中的一部分 (例如“登录”仅需要用户名和密码)。 如果我使用部分填充的用户-这会使我的代码的未来维护者感到困惑。 所以我要么使用专用的LoginDetails对象,要么使用扁平化的参数:login(user,password)。 除了迁移到node.js之外,我没有任何神奇的解决方案;)