Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-除了getX和setX之外,实体类还应该包含方法吗?_Java_Spring_Jakarta Ee - Fatal编程技术网

Java Spring-除了getX和setX之外,实体类还应该包含方法吗?

Java Spring-除了getX和setX之外,实体类还应该包含方法吗?,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我对Django及其MVC(MTV)概念有一些经验。在django的上一个项目中,我总是尝试将许多函数(方法)打包到模型类——所有这些都可以在模型对象中的单个实体上工作。我知道在javaee世界中,层比3层多得多,所以我应该如何在Spring中实现呢?例如,我应该将总结实体的几个属性的函数放在哪里?无论如何,spring中的模型也被称为“模型”吗?通常情况下,不需要在模型对象本身中添加很多函数。春天是关于好的设计。换句话说,模型应该只是表示模型元素的信息的容器。对模型所做的一切都应该通过DAO之

我对Django及其MVC(MTV)概念有一些经验。在django的上一个项目中,我总是尝试将许多函数(方法)打包到
模型类
——所有这些都可以在
模型
对象中的单个实体上工作。我知道在
javaee
世界中,层比3层多得多,所以我应该如何在
Spring
中实现呢?例如,我应该将总结实体的几个属性的函数放在哪里?无论如何,spring中的模型也被称为“模型”吗?

通常情况下,不需要在模型对象本身中添加很多函数。春天是关于好的设计。换句话说,模型应该只是表示模型元素的信息的容器。对模型所做的一切都应该通过DAO之类的东西来完成。在春季,我的模型通常如下所示:

public class Car {
    private int id;
    private Engine engine;
    private Control steeringWheel;
    ...

    // getters and setters
}
public interface Controller {
    public void move( Player player, Location location );
    ...
}
用一把刀:

public interface CarDao {
    public void add( Car car );
    public void update( int id, Car car );
    ...
}

与其说是层,不如说是保持数据对象的简单,这样您就可以在企业系统中随意移动它们,而不会感到意外。Spring本身并不关心在一个类中放入多少方法,但我同意Lucas的观点,即保持实体类的简单是更好的设计


长期的经验使我多次回到这个结论。“繁忙”的实体对象迟早会成为一个难题。

只要应用良好的OO实践即可。如果某些行为可以封装在模型类中,那么一定要将其放入模型类中。例如,具有
salary
bonus
属性的模型当然可能具有
getTotalIncome
方法,该方法返回薪资和奖金之和


当然,它不应该越过自己的边界。如果总收入的计算需要调用一个服务来根据当前月份和数据库中的某些配置应用某些税,这将成为业务逻辑,并将您的模型对象与服务层相耦合,这是不应该做的。因此,本例中的
getTotalIncome
方法应该不再存在。

好的,我将为玩家、游戏和状态创建一个模型对象。我将为每一个都有一个DAO,我将有一个控制器,可能称为控制器,它将执行所有操作。例如:

public class Player {
    private String name;
    ...
}

public class State {
    private Map<Player, Location> locations;
    private Map<Player, Health> healths;
    ...
}

public class Game {
    private Player player1;
    private Player player2;
    private State state;
    ...
}

JavaEE改变了J2EE世界中常见的许多模式。尽管Spring不是JavaEE,但它的设计理念是相同的——摆脱遗留的J2EE繁琐。Adam Bien有一本关于J2EE模式已成为反模式的好书——“”


其中一章“持久域对象”正好回答了您的问题。使用真实对象对应用程序进行建模,而不关心开始时的持久性。。。事实证明,JPA在将丰富的域对象映射到关系表方面非常灵活。您必须实现的逻辑越复杂,就越容易维护和开发面向对象的持久性。

您能扩展一下您的答案吗?我应该把我放在哪里。E哪个函数总结了模型的2个字段?@Maqxiq,您具体想总结什么,原因是什么?这很重要。给我一个你的两个对象的例子,你在求和什么,以及你希望用求和做什么。好吧,我给你一个更复杂的例子:假设我有model
player
。2D棋盘上有一个游戏,每个回合玩家都必须做一个动作。在Django的模型中,我可以定义像doMove(x,y)这样的方法和另一个私有方法,检查新的x和y是否与以前的不同。如果一切正常,将保存对象(以db为单位)。我怎样才能在java中实现这种构建逻辑呢?是的,这就是我想听到的:)谢谢你的代码,但它真的应该是控制器吗?Imho控制器应返回view-generate front end?@Maxiq,在纯MVC中,控制器用于处理操作、修改模型,并向视图提供表示所需的数据。它实际上控制着应用程序。然而,大多数人并没有完全实现纯MVC。您可以选择使用尽可能多或尽可能少的关注点,但分离关注点几乎总是一件好事。