代码重构过程

Refactoring process of code

上下文: 目前我正在重构 spring + hibernate 源代码。我有一个关于以下场景中最优选方法的查询。

问题:从控制器 class 向服务接口传递值时,作为不同的参数或作为 class 对象传递哪个更好? [在内存、可重用性等方面]

示例:

myservice.getUser(login,password,....)

myservice.getUser(userObj)

恕我直言,每种方法都有权衡,但通常我会尝试使用模型对象(= 'User'、'Product' ...从人类的角度来看这是有意义的)。 我能想到的权衡点:

1) 内存和垃圾收集:'User' 对象稍微贵一些,需要在堆上分配,但它不应该成为大多数 IT 应用程序的瓶颈。 Plus GC擅长处理这种短命对象。

2) 'User' 有利于未来的扩展和可读性:如果您需要更多的用户详细信息(帐户、居住国家/地区...)而不是封装用户,否则您的服务签名将成为一场噩梦...

3) 多态性:如果封装成 'User',可能会有不同的用户类型(例如 "FreeUser"、"VIPUser"),而您的服务并不关心确切的类型只要他们都提供 'user.isEntitledForDiscount()'

4) 我对部分填充的对象有严重的困境。 IE。如果我有一个 "User" 模型,其中包含许多属性(电子邮件、工作经历...),但某些服务只需要其中的 部分 (例如,仅 'login'需要用户名+密码)。如果我使用部分填充的用户 - 它会使我的代码的未来维护者感到困惑。所以我要么使用专用的 LoginDetails 对象,要么使用扁平化的参数:login(user,password)。除了移动到 node.js ;)

,我没有任何神奇的解决方案