MVC:改变getter中的返回值

时间:2016-01-20 17:29:03

标签: java model-view-controller

我有一个具有getDate() getter方法的模型。

在控制器中,我定义了一个名为timeAgoUtil的实用程序类,它计算自该Date值以来的时间,例如:6 hours ago

现在我每次想要在屏幕上获取值时都需要访问该实用程序方法,这是非常多的。大部分时间都在列表中的对象上,这需要我遍历它以获得每次前面的值。

我的方法:

  • 在模型开始时,我定义了timeAgoUtil实用程序类。
  • 我为名为getTimeAgo()的模型创建了一个新的getter方法。
  • 在那种方法中,我放了return timeAgoUtil.convert(this.date);

在getter中重新调整结果之前是否操作结果并在模型常用中定义实用程序类?

2 个答案:

答案 0 :(得分:1)

不,不是。

Getters理想情况下应仅返回数据,不应包含任何业务逻辑。这是一般方法和最佳实践。

你现在正在做的不是正确的方法,尽管它会起作用。

最好的方法/实践是定义一个Utility类,并在其中定义计算时间的方法。模型不应包含除setter,getters和构造函数之外的任何其他方法,如果需要,则不包含equals和hashcode。

答案 1 :(得分:0)

根据您提供的信息,您似乎正在使用getDate()方法获取对象的日期并计算自该日期以来经过了多长时间。在我看来,你不应该在后端做到这一点。

我的建议是在前端使用普通的js或像angular

这样的框架

修改

如上所述here,您可以使用Stack Exchange网站使用的内容来创建这些时间字符串。有一个名为timeago

的jQuery插件

使用该插件非常简单,它可以自动清理和更新。

这是一个快速示例(来自插件的主页):



// Now, let's attach it to your timestamps on DOM ready:
// This will turn all abbr elements with a class of timeago and an ISO 8601 timestamp in the title: 

jQuery(document).ready(function() {

  jQuery("abbr.timeago").timeago();
});

<script src="http://timeago.yarp.com/jquery.timeago.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17,
  2008</abbr> into something like this: <abbr class="timeago" title="July 17,
  2008">about a year ago</abbr> which yields: about a year ago. As time passes, the timestamps will automatically update.
&#13;
&#13;
&#13;